2012-02-20 176 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> 

現在我需要當前的RDN值(在這種情況下,無論是myserver.comnot settest.myserver.com),我需要的價值或者它鏈接到(edit-reverse.cgi?id=11完整的URL ),它鏈接到陣列$aIP中的IP地址。

這將是預期的輸出(未特別是在這個輸出格式,而在數組或東西):

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 2012-02-20 19:20:46

+1

http://simplehtmldom.sourceforge.net/ – Crontab 2012-02-20 19:23:33

+0

你不想做的是使用正則表達式。原因如下:http://htmlparsing.com/regexes – 2014-03-07 03:34:08

回答

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

感謝所有。