2015-04-23 1 views
1

Я следующие строки со мной, в котором имя файла присутствует между якорными тегами:Как получить текст (имена файлов) между якорь-тегами в PHP?

$test1 = test<div class="comment_attach_file"> 
      <a class="comment_attach_file_link" href="http://52.1.47.143/feed/download/year_2015/month_04/file_3b701923a804ed6f28c61c4cdc0ebcb2.txt" >phase2 screen.txt</a><br> 
      <a class="comment_attach_file_link_dwl" href="http://52.1.47.143/feed/download/year_2015/month_04/file_3b701923a804ed6f28c61c4cdc0ebcb2.txt" >Download</a> 
      </div>; 

    $test2 = This is a holiday list.<div class="comment_attach_file"> 
      <a class="comment_attach_file_link" href="http://52.1.47.143/feed/download/year_2015/month_04/file_2c96b997f03eefab317811e368731bb6.pdf" >Holiday List-2013.pdf</a><br> 
      <a class="comment_attach_file_link_dwl" href="http://52.1.47.143/feed/download/year_2015/month_04/file_2c96b997f03eefab317811e368731bb6.pdf" >Download</a> 
      </div>; 

    $test3 = <div class="comment_attach_file"> 
      <a class="comment_attach_file_link" href="http://52.1.47.143/feed/download/year_2015/month_04/file_8479c0b60867fdce35ae94a668dfbba9.docx" >sample2.docx</a><br> 
      </div>; 

От первой строки я хочу текст (т.е. имя файла) «phase2 screen.txt»

Из второй строки я хочу текст (например, имя файла) «Список праздников-2013.pdf»

с третьей строки я хочу текста (т.е. имя файла) «sample2.docx»

Как мне сделать PHP с помощью $dom = new DOMDocument;?

Пожалуйста, помогите мне.

Спасибо.

+1

Да, используйте для этого парсер HTML. В Интернете есть много учебников. Попробуйте что-нибудь, и мы поможем вам, если вы столкнетесь с трудностями. – user4035

ответ

0

Вы можете использовать DOMXPath таргетинг на эту ссылку, содержащую текст, который вы хотите использовать свой класс указать на него:

$dom = new DOMDocument; 
for($i = 1; $i <= 3; $i++) { 
    @$dom->loadHTML(${"test{$i}"}); 
    $xpath = new DOMXpath($dom); 
    $file_name = $xpath->evaluate('string(//a[@class="comment_attach_file_link"])'); 
    echo $file_name , '<br/>'; 
} 

Или, если вы не хотите использовать XPath, вы можете получить элементы анкерных и проверить для своего класса, если его что один, получить ->nodeValue:

$dom = new DOMDocument; 
for($i = 1; $i <= 3; $i++) { 
    @$dom->loadHTML(${"test{$i}"}); 
    foreach($dom->getElementsByTagName('a') as $anchor) { 
     if($anchor->getAttribute('class') === 'comment_attach_file_link') { 
      echo $anchor->nodeValue, '<br/>'; 
      break; 
     } 
    } 
} 

Sample Output

0

Если вы хотите получить значение после метки или привязки, как показано в браузере пользователя: это невозможно при использовании «стандартного» HTTP, поскольку это значение никогда не отправляется на сервер (следовательно, это не будет доступно в $_SERVER["REQUEST_URI"] или аналогичных предопределенных переменных). Вам потребуется какая-то магия JavaScript на стороне клиента, например. чтобы включить это значение в качестве параметра POST.

В йот вы можете использовать некоторые функции, как это, чтобы получить ссылки и изменить его в соответствии с вашими потребностями

function findAnchors($html) 
{ 
    $links = array(); 
    $doc = new DOMDocument(); 
    $doc->loadHTML($html); 
    $navbars = $doc->getElementsByTagName('div'); 
    foreach ($navbars as $navbar) { 
     $id = $navbar->getAttribute('id'); 
     if ($id === "anchors") { 
      $anchors = $navbar->getElementsByTagName('a'); 
      foreach ($anchors as $a) { 
       $links[] = $doc->saveHTML($a); 
      } 
     } 
    } 
    return $links; 
}