2012-09-08 30 views
11

में कोई नाम नहीं है, मैं कुछ वेबपृष्ठों से "लिंक" तत्व प्राप्त करने का प्रयास कर रहा हूं। मैं यह नहीं समझ सकता कि मैं क्या गलत कर रहा हूं।PHP DOMDocument :: loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: इकाई

Severity: Warning

Message: DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: no name in Entity, line: 536

Filename: controllers/test.php

Line Number: 34

लाइन 34 है कोड में निम्नलिखित:: मैं निम्न त्रुटि हो रही है

 $dom->loadHTML($html); 

मेरी कोड:

  $url = "http://www.amazon.com/"; 

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
    if($html = curl_exec($ch)){ 

     // parse the html into a DOMDocument 
     $dom = new DOMDocument(); 

     $dom->recover = true; 
     $dom->strictErrorChecking = false; 

     $dom->loadHTML($html); 

     $hrefs = $dom->getElementsByTagName('a'); 

     echo "<pre>"; 
     print_r($hrefs); 
     echo "</pre>"; 

     curl_close($ch); 


    }else{ 
     echo "The website could not be reached."; 
    } 
+0

पाया जा सकता है एक गूगल अनुकूल यूआरएल को बदल दिया है। अगर यह आपके लिए उचित नहीं है तो इसे वापस वापस करें .. –

+0

क्या आप इसे देख सकते हैं? [क्यों-होगा-यह-त्रुटि-हैंडलिंग-फ़ंक्शन-कारण-domdocument-to-hang] (http://stackoverflow.com/questions/7129115) –

उत्तर

32

इसका मतलब है कि एचटीएमएल कोड के कुछ अवैध है । यह सिर्फ एक चेतावनी है, त्रुटि नहीं। आपकी स्क्रिप्ट अभी भी इसे संसाधित करेगी। चेतावनी सेट

libxml_use_internal_errors(true); 

या फिर आप पूरी तरह से एक दुष्ट & प्रतीक है कि तुरंत एक उचित टैग द्वारा सफल हो के कारण हो सकता

@$dom->loadHTML($html); 
+0

अभी भी वही त्रुटि प्राप्त कर रहा है – David

+0

क्या आप वाकई libxml_use_internal_errors सेट करते हैं (सच); PHP स्क्रिप्ट के शीर्ष पर? मैंने एक और वैकल्पिक – Kris

+0

प्रदान करने के लिए अपना उत्तर भी अपडेट किया जो चेतावनी को छुपाता है, लेकिन यह एक खाली वस्तु – David

8

ऐसा करने से चेतावनी को दबाने सकता है को दबाने के लिए। अन्यथा आपको एक लापता ; त्रुटि प्राप्त होगी। देखें: Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity,

समाधान करने के लिए है - &amp;
साथ & प्रतीक बदलने के लिए या यदि आप होना आवश्यक है & के रूप में यह तो है, हो सकता है कि आप इसे में लगा सकता है: <![CDATA[ - ]]>

2

एचटीएमएल खराब है का गठन किया। यदि डीओएम दस्तावेज़ में एचटीएमएल को खराब लोड करने के लिए पर्याप्त रूप से पर्याप्त रूप से गठित किया गया हो तो भी असफल हो सकता है। अगर लोड एचटीएमएल काम नहीं कर रहा है तो त्रुटियों को दबाकर व्यर्थ है। मैं HTML टिडी जैसे टूल का उपयोग करके खराब गठित HTML को "साफ" करने के लिए सुझाव देता हूं यदि आप HTML को DOM में लोड करने में असमर्थ हैं।

एचटीएमएल साफ यहाँ http://www.htacg.org/tidy-html5/