2010-12-22 90 views
0

我有下面的代碼運行,但它仍然認爲上exteranl網頁是不是身體標記內是有效的...不知道什麼是錯的鏈接...幫助用PHP DOM功能

$dom = new DOMDocument(); 
    @$dom->loadHTML($get_webpage); 
    @$dom->getElementsByTagName('body'); 
     $x = new DOMXPath($dom); 

    foreach($x->query("//a") as $node) 
     { 
      if ($node->getAttribute("href") == "http://www.mysite.com/" && $node->getAttribute("rel") == "" && $node->textContent == "mysite") 
        { 
       // echo 'valid link on site'; 
      } 

     } 

外部網頁

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
</head> 
<a href="http://www.mysite.com/"><strong>mysite<strong></a> 
<body> 
text text 
</body> 
</html> 
+0

等等,什麼?決定文檔是否符合文檔類型的規範不是HTML解析器的工作。 – Matchu 2010-12-22 21:47:52

回答

1

這是因爲DOM會改寫的HTML 「正常」。如果您使用saveHTML,則會看到a標記現在位於body標記中。我認爲沒有辦法改變這種行爲。

旁註:

使用此:

libxml_use_internal_errors(true); 
$dom->loadHTML($data); 

相反的:

@$dom->loadHTML($data); 

它的清潔。