2012-08-05 8 views
20

मैं पहले एमएएमपी पर कोड चलाता हूं और यह बहुत अच्छा काम करता है।डोम लोड HTML एक सर्वर पर ठीक से काम नहीं करता

चेतावनी:: लेकिन जब मैं एक और सर्वर पर कोड भागने की कोशिश की, मैं की तरह चेतावनी का एक बहुत मिल गया DOMDocument :: loadHTML(): अनपेक्षित अंत टैग: इकाई में सिर, लाइन:/cgihome में 3349 /zhang1/html/cgi-bin/getPrice.php लाइन 17 चेतावनी: DOMDocument :: loadHTML(): htmlParseStartTag: में गलत स्थान टैग, एंटीटी, लाइन: 3350 में/cgihome/zhang1/html/cgi-bin/getPrice। इकाई, लाइन में टैग हैडर अवैध: लाइन में pHP 17 चेतावनी: DOMDocument :: loadHTML() लाइन पर /cgihome/zhang1/html/cgi-bin/getPrice.php में 3517 17

कोड निम्नलिखित हैं:

<?php 
$amazon = file_get_contents('http://www.amazon.com/blablabla'); 
$doc = new DOMdocument(); 
$doc->loadHTML($amazon); 
$doc->saveHTML(); 
$price = $doc -> getElementById('actualPriceValue')->textContent; 
$ASIN = $doc -> getElementById('ASIN')->getAttribute('value'); 
?> 

किसी को भी जानता है कि क्या हो रहा है? धन्यवाद!

उत्तर

79

चेतावनी को अक्षम करने के आप

libxml_use_internal_errors(true); 

यह मेरे लिए काम करता उपयोग कर सकते हैं। Manual

पृष्ठभूमि: आप अवैध HTML लोड कर रहे हैं। अमान्य HTML काफी आम है, DOMDocument::loadHTML अधिकांश समस्याओं को ठीक करता है, लेकिन डिफ़ॉल्ट रूप से चेतावनियां देता है।

libxml_use_internal_errors के साथ आप उस व्यवहार को नियंत्रित कर सकते हैं।

libxml_use_internal_errors(true); 
$doc->loadHTML($amazon); 
+0

समस्या हल हो गई है। आपका बहुत बहुत धन्यवाद! – LuZ

+0

एक ऐसे फ़ंक्शन के लिए मैन्युअल पृष्ठ पर जाना न भूलें जो भविष्य में कुछ त्रुटियां उत्पन्न करता है। आपको अक्सर उपयोगी नोट्स और उपयोग infos मिलते हैं। उपयोगकर्ता-टिप्पणियां भी हैं। ['DOMDocument :: loadHTML'] देखें (http://de.php.net/DOMDocument.loadHTML) – hakre

+0

@ user1577801: यदि इस उत्तर ने आपकी समस्या हल की है, तो बड़े हरे रंग के टिक चिह्न पर क्लिक करके इसे ऊपर उठाने और स्वीकार करने पर विचार करें उत्तर का स्कोर –

0

यह समस्या गैर एक्सएचटीएमएल कोड

DOMDocument() के रूप में केवल साफ एक्सएचटीएमएल संसाधित कर सकते हैं आप अपने कोड को साफ करने की जरूरत से संबंधित है: दस्तावेज़ लोड करने से पहले इसे सेट करें

PHP में एक ऐसा एक्सटेंशन है जो नौकरी को बहुत अच्छी तरह से करता है। कहा जाता है साफ php.net/book.tidy

यह मुश्किल के रूप में आप अपने php.ini में इसे सक्षम करने के

फिर

$tidy_config = array( 
        'clean' => true, 
        'output-xhtml' => true, 
        'show-body-only' => true, 
        'wrap' => 0, 

        ); 

$tidy = tidy_parse_string($html, $tidy_config, 'UTF8'); 
$tidy->cleanRepair(); 
$doc = new DOMdocument(); 
$doc->loadHTML((string) $tidy); 
1

आप इस तरह की चेतावनी को दबाने की आवश्यकता हो सकती हो सकता है:

@$doc->loadHTML($amazon);