2014-10-29 2 views
0

я получил содержание страницы, как это:Получить содержание в неправильных выражений в PHP

<table width="100%" > 
<!--Başla--><tr> 
<td><a href="http://www.example.com/duyurular/2014/ekim/kutlama.html" class="duyuru1" target="_blank">&bull; Kutlama 
<br /><span class="hmk">&nbsp;&nbsp;&nbsp;&nbsp; Authority 28.10.2014</span></td></tr><tr><td><hr /></td></tr><!--Son--> 
<!--Başla--><tr> 
<td><a href="http://www.example.com/duyurular/2014/ekim/genel-kurul.html" class="duyuru1" target="_blank">&bull; Genel Kurul 
<br /><span class="hmk">&nbsp;&nbsp;&nbsp;&nbsp; Authority 28.10.2014</span></td></tr><tr><td><hr /></td></tr><!--Son--> 
<!--Başla--><tr> 
<td><a href="http://www.example.com/duyurular/2014/ekim/katilimci.pdf" class="duyuru1" target="_blank">&bull; Katılımcı 
<br /><span class="hmk">&nbsp;&nbsp;&nbsp;&nbsp; Authority 22.10.2014</span></td></tr><tr><td><hr /></td></tr><!--Son--> 
<!----duyuru başlangıc--->  
<tr > 
<td ><div align="right"><a href="http://www.example.com/arsiv/duyuru/index.html" target="_blank" class="hmk"><span class="style1">Duyuru Arşivi</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a></div> 
<!-- Güncel Duyurular Bitişi--> 
</td> 
</tr> 
</table> 

Я хочу, чтобы получить http://www.example.com/duyurular/2014/ekim/kutlama.html, http://www.example.com/duyurular/2014/ekim/genel-kurul.html, http://www.example.com/duyurular/2014/ekim/katilimci.pdf ссылки, Kutlama, Genel Kurul, Katılımcı содержание ссылок, Authority и dates. Видите ли, нет стандартного html. Я пытался так:

$html = file_get_contents('http://www.example.com/duyurular/duyuru.asp'); 
$dom = new DOMDocument; 
$dom->loadHTML($html); 
$links = $dom->getElementsByTagName('a'); 
foreach ($links as $link){ 
    $exp = explode($link->textContent, '&nbsp;&nbsp;&nbsp;&nbsp; '); 
    $bag[] = '<a href="'.$link->getAttribute('href').'">'.$exp[0].'</a> ('.$exp[1].')'; 
} 
foreach ($bag as $d) 
    echo $d.'<br />'; 

Конечно, мне не удалось. Не могли бы вы помочь мне?

+0

Подсказка: '-> textContent' * никогда * с [HTML-сущностями] (http://dev.w3.org/html5/html-author/charref). – hakre

ответ

1

Некоторые люди не любят, но регулярное выражение иногда прекрасно, чтобы извлечь вещи из HTML:

if (preg_match_all('#"(https?:[^"]+)"[^&]+&bull;\s*([^<]+).+Authority ([\d.]+)#', $html, $matches)) { 
    $urls = $matches[1]; 
    $labels = $matches[2]; 
    $dates = $matches[3]; 
} 

$matches содержит:

[1] => Array 
    (
     [0] => http://www.example.com/duyurular/2014/ekim/kutlama.html 
     [1] => http://www.example.com/duyurular/2014/ekim/genel-kurul.html 
     [2] => http://www.example.com/duyurular/2014/ekim/katilimci.pdf 
    ) 

[2] => Array 
    (
     [0] => Kutlama 

     [1] => Genel Kurul 

     [2] => Katılımcı 

    ) 

[3] => Array 
    (
     [0] => 28.10.2014 
     [1] => 28.10.2014 
     [2] => 22.10.2014 
    ) 

Вы, возможно, придется trim() все результаты.

+0

спасибо. Но когда я попытался на своей странице, он вернул ошибку в UTF-8 следующим образом: 'Kat l mc (22.10.2014)' –

+0

Либо ваша страница не UTF-8, либо вы читаете другой веб-сайт как не-UTF-8, или веб-сайт не UTF-8, и т. д. и т.д. UTF-8 везде все время. Проверьте настройку кодировки браузера (в Chrome: Меню> Дополнительные инструменты> Кодировка). Что активно? – Rudie

+0

Да. Сожалею. Я еще заметил. Другая веб-страница закодирована с помощью 'windows-1254'. Мой сайт ise закодирован с помощью 'UTF-8'. Как я могу решить проблему? –

Смежные вопросы