2012-02-20 5 views
1

Я обновляю свой сайт, чтобы установить rDNS, однако я здесь, чтобы спросить ваше мнение о том, как это справится с моей проблемой. У меня есть все IP (IPv4) в массиве с именем $aIP. Теперь у меня есть список, как это:Извлечение текста из HTML

<tr><td>1.2.3.4</td><td>hostname.bla.com</td><td><a href="edit-reverse.cgi?id=1">myserver.com</a></td></tr> 
<tr><td>1.2.3.5</td><td>hostname.bla.com</td><td><a href="edit-reverse.cgi?id=2"><i>not set</i></a></td></tr> 
<tr><td>1.2.3.6</td><td>hostname.bla.com</td><td><a href="edit-reverse.cgi?id=3"><i>not set</i></a></td></tr> 
<tr><td>1.2.3.7</td><td>hostname.bla.com</td><td><a href="edit-reverse.cgi?id=4">test.myserver.com</a></td></tr> 
<tr><td>1.2.3.8</td><td>hostname.bla.com</td><td><a href="edit-reverse.cgi?id=5"><i>not set</i></a></td></tr> 
<tr><td>1.2.3.9</td><td>hostname.bla.com</td><td><a href="edit-reverse.cgi?id=6"><i>not set</i></a></td></tr> 

Теперь мне нужно текущее значение RDNS (в данном случае, либо myserver.com или not set или test.myserver.com) и мне нужно значение или полный URL, который он связывает с (edit-reverse.cgi?id=1 или 1), который связан с IP-адресом в массиве $aIP.

Это будет ожидаемый результат (не особо в этом формате вывода, а быть в массиве или что-то):

1.2.3.4 => 1, myserver.com 
1.2.3.5 => 2, not set 
1.2.3.6 => 3, not set 
1.2.3.7 => 4, test.myserver.com 
1.2.3.8 => 5, not set 
1.2.3.9 => 6, not set 

Пожалуйста, имейте в виду, что не все IP-адреса у меня может быть в $aIP массиве , поэтому в основном он должен прокручивать HTML-код и искать значения в соответствии с массивом $aIP.

Я думал об использовании регулярного выражения, но потом я не знаю много о них, поэтому это, вероятно, будет очень неэффективным кодом. Какой был бы лучший способ справиться с этим?

+0

Обсуждали ли вы использование парсера HTML для анализа этого HTML? – Borealid

+1

http://simplehtmldom.sourceforge.net/ – Crontab

+0

То, что вы НЕ хотите делать, это использовать регулярные выражения. Вот почему: http://htmlparsing.com/regexes –

ответ

2

Я нашел идеальное решение, используя встроенные функции:

/*** a new dom object ***/ 
$dom = new domDocument; 

/*** load the html into the object ***/ 
$dom->loadHTML($html); 

/*** discard white space ***/ 
$dom->preserveWhiteSpace = false; 

/*** the table by its tag name ***/ 
$tables = $dom->getElementsByTagName('table'); 

/*** get all rows from the table ***/ 
$rows = $tables->item(0)->getElementsByTagName('tr'); 

/*** loop over the table rows ***/ 
foreach ($rows as $row) 
{ 
    /*** get each column by tag name ***/ 
    $cols = $row->getElementsByTagName('td'); 
    /*** echo the values ***/ 
    echo $cols->item(0)->nodeValue.'<br />'; 
    echo $cols->item(1)->nodeValue.'<br />'; 
    echo $cols->item(2)->nodeValue; 
    echo '<hr />'; 
} 

Найдено в http://www.phpro.org/examples/Parse-HTML-With-PHP-And-DOM.html

Спасибо всем.

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