2012-01-17 13 views
8

मैं HTML DomObject के उपयोग से वेबपृष्ठों को पार्स करने का प्रयास कर रहा हूं ताकि उन्हें एसईओ गुणवत्ता के लिए स्कैन करने के लिए एप्लिकेशन का उपयोग किया जा सके।PHP डोम डॉक्यूमेंट को अपने एचटीएमएल स्ट्रिंग को "फिक्सिंग" से कैसे रोकें

हालांकि मैंने किसी समस्या के बावजूद भाग लिया है। परीक्षण प्रयोजनों के लिए मैं एक छोटे से html पृष्ठ लिखा है निम्नलिखित गलत एचटीएमएल युक्त

<head> 
<meta name="description" content="randomdesciption"> 
</head> 
<title>sometitle</title> 

आप देख सकते हैं शीर्षक हेड टैग जो बाहर त्रुटि मैं पता लगाने के लिए कोशिश कर रहा हूँ है।

अब समस्या आती है, जब मैं इस पृष्ठ से responce स्ट्रिंग को पकड़ने के लिए कर्ल का उपयोग करता हूं तो इसे HTML दस्तावेज़ के रूप में लोड करने के लिए इसे डोम दस्तावेज़ पर भेजता हूं, यह वास्तव में शीर्षक के चारों ओर एक और टैग जोड़कर इसे ठीक करता है।

<head> 
<meta name="description" content="randomdesciption"> 
</head> 
<head><title>sometitle</title></head> 

मैं कर्ल प्रतिक्रिया डेटा की जाँच कर ली और कहा कि वास्तव में समस्या, loadHTML के निष्पादन() विधि एचटीएमएल वाक्य रचना को ठीक करता दौरान किसी भी तरह php DOMDocument नहीं है।

मैंने डोमडॉक्यूमेंट रिकवरी, विकल्प एंटीटीज और वैधताऑनपर्स विशेषताओं को बिना किसी सफलता के झूठी सेट करके बंद करने का प्रयास किया है।

मैं Google खोज रहा हूं लेकिन मैं अब तक कोई जवाब नहीं ढूंढ पा रहा हूं। मुझे लगता है कि यह किसी ऐसे व्यक्ति के लिए दुर्लभ है जो वास्तव में टूटा हुआ HTML नहीं तय करना चाहता है।

कोई भी जानता है कि डोमडॉक्यूमेंट को मेरे टूटी हुई एचटीएमएल को ठीक करने से कैसे रोकें?

अग्रिम धन्यवाद

+0

<?php $html = <<< HTML <head> <meta name="description" content="randomdesciption"> </head> <title>sometitle</title> HTML; $dom = new DOMDocument; $dom->loadHTML($html); $dom->formatOutput = true; echo $dom->saveHTML(), LIBXML_VERSION; 

मेरी मशीन पर दे देंगे आप इसे पार करने से पहले [साफ] (http://php.net/tidy) के माध्यम से अपने मार्कअप चल माना जाता है डोम के लिए, या यहां तक ​​कि डोम के बदले में? मार्कअप त्रुटियों का पता लगाने के लिए यह एक उपयोगी विस्तार है। – TML

+0

नोट: यह व्यवहार वास्तव में HTML में निर्दिष्ट है: ' 'का एक वैकल्पिक उद्घाटन और समापन टैग है और यह केवल' 'जैसे प्रमुख तत्व की उपस्थिति से निहित है, जिसका अर्थ है कि सिर के बाहर' <title> ' अपने उद्घाटन टैग के साथ '<head> 'तत्व के भीतर होने के रूप में पार्स किया गया। एक बार स्मृति में पढ़ने के बाद, डोम स्रोत में कौन से वैकल्पिक टैग मौजूद नहीं थे, क्योंकि दस्तावेज़ के अर्थशास्त्र का हिस्सा नहीं है, इसलिए वे हमेशा मौजूद होते हैं। HTML_PARSE_NO_IMPLIED का उपयोग करने पर साइड इफेक्ट्स हो सकते हैं कि कुछ मान्य HTML दस्तावेज़ों का अर्थ कैसे लिया जाता है। – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/53212/">thomasrutter</a></span> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> </div> <div class="answer-title"> <span class="text-logo margin-top-sm">A</span> <h2 class="title h4">उत्तर</h2> </div> <div class="item-description text-md markdown-body margin-bottom-40 voidso"> <article class="board-top-1 padding-top-10"> <div class="post-col vote-info"> <span class="count">7<i class="fa fa-thumbs-up"></i></span> <i class="fa fa-check fa-2x"></i> </div> <div class="post-offset"> <div class="answer fmt"> <p>अद्यतन: पीएचपी 5.4 के रूप में आप <a href="http://php.net/manual/en/libxml.constants.php#constant.libxml-html-noimplied" rel="nofollow noreferrer"><code class="prettyprint-override">HTML_PARSE_NO_IMPLIED</code></a></p> <pre><code class="prettyprint-override">$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED); </code></pre> <hr> <p><em>नीचे</em></p> <p>मूल जवाब तुम नहीं कर सकते उपयोग कर सकते हैं। सिद्धांत <a href="http://xmlsoft.org/html/libxml-HTMLparser.html" rel="nofollow noreferrer">there is a flag <code class="prettyprint-override">HTML_PARSE_NO_IMPLIED</code> for that in libxml</a> में अंतर्निहित मार्कअप जोड़ने से रोकने के लिए, लेकिन यह PHP से उपलब्ध नहीं है।</p> <p>एक साइडेनोट पर, यह विशेष व्यवहार <code class="prettyprint-override">LIBXML_VERSION</code> पर निर्भर प्रतीत होता है।</p> <p>इस स्निपेट चल रहा है:</p> <pre><code class="prettyprint-override"><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head><meta name="description" content="randomdesciption"></head> <title>sometitle</title> </html> 20707 </code></pre> </div> <div class="post-info"> <div class="post-meta row"> <p class="text-secondary col-lg-6"> <span class="source"> <a rel="noopener" target="_blank" href="https://stackoverflow.com/q/8893537">स्रोत</a> </span> </p> <p class="text-secondary col-lg-6"> <span class="float-right date"> <span>2012-01-17 11:06:13</span> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/208809/">Gordon</a></span> </p> <p class="col-12"></p> <p class="col-12"></p></div> </div> <!-- comments --> <div class="comments"> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+1</span></div> <div class="col-lg-11"> <p class="commenttext">यह वह नहीं है जिसे मैंने आशा की थी लेकिन कम से कम मैं कुछ ऐसी चीज खोजना बंद कर सकता हूं जो बस वहां नहीं है। आपकी मदद के लिए धन्यवाद यह सबसे अधिक जानकारीपूर्ण रहा है। – <span class="text-secondary"> <small> <span></span> </small> </span> </p> </div> </div> </div> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+5</span></div> <div class="col-lg-11"> <p class="commenttext">यह अब [loadhtml] (http://php.net/manual/en/domdocument.loadhtml.php) विधि के दूसरे पैरामीटर 'विकल्प' के साथ PHP v5.4 + में उपलब्ध है। – <span class="text-secondary"> <small> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1038284119" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> <div class="clearfix"> </div> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1575177025"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="padding-top-10"></div> </div> </div> <script type="text/javascript" src="http://img.uwenku.com/uwenku/script/side.js?t=1644592048592"></script> <script type="text/javascript" src="http://img.uwenku.com/uwenku/plugin/highlight/highlight.pack.js"></script> <link href="http://img.uwenku.com/uwenku/plugin/highlight/styles/docco.css" media="screen" rel="stylesheet" type="text/css" /> <script type="text/javascript"> $('pre').each(function(i, e) { hljs.highlightBlock(e, "<span class='indent'> </span>", false) }); </script> <div class="col-lg-3 col-md-4 col-sm-5"> <div id="rightTop"> <div class="row"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="5415218910" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> नवीनतम प्रश्न </div> <div class="m-b-sm m-t-sm clearfix"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://hi.uwenku.com/question/p-azythlhj-b.html" target="_blank" title="रसीद प्रिंटर पर डब्ल्यूपीएफ प्रिंट विज़ुअल क्लिपिंग छवि"> रसीद प्रिंटर पर डब्ल्यूपीएफ प्रिंट विज़ुअल क्लिपिंग छवि </a> </li> <li class="side_article_list_item"> 2. <a href="http://hi.uwenku.com/question/p-ajlnaomi-h.html" target="_blank" title="केंडो यूआई स्वत: पूर्ण डेटा के डेटा फ़ील्ड के लिए दो फ़ील्ड कैसे गठबंधन करें?"> केंडो यूआई स्वत: पूर्ण डेटा के डेटा फ़ील्ड के लिए दो फ़ील्ड कैसे गठबंधन करें? </a> </li> <li class="side_article_list_item"> 3. <a href="http://hi.uwenku.com/question/p-atkoholo-bk.html" target="_blank" title="क्यों --list.end() संकलित करता है?"> क्यों --list.end() संकलित करता है? </a> </li> <li class="side_article_list_item"> 4. <a href="http://hi.uwenku.com/question/p-cxmdwrzf-bn.html" target="_blank" title="HttpContext.Current एमवीसी 4 में हल नहीं हो रहा है"> HttpContext.Current एमवीसी 4 में हल नहीं हो रहा है </a> </li> <li class="side_article_list_item"> 5. <a href="http://hi.uwenku.com/question/p-xjrotuur-bg.html" target="_blank" title="डीटीओ पैटर्न: दो ऑब्जेक्ट्स के बीच गुणों की प्रतिलिपि बनाने का सबसे अच्छा तरीका"> डीटीओ पैटर्न: दो ऑब्जेक्ट्स के बीच गुणों की प्रतिलिपि बनाने का सबसे अच्छा तरीका </a> </li> <li class="side_article_list_item"> 6. <a href="http://hi.uwenku.com/question/p-trgpstfe-bh.html" target="_blank" title="410 स्थिति प्रदर्शित करता है "आपके द्वारा अनुरोधित पृष्ठ हटा दिया गया था""> 410 स्थिति प्रदर्शित करता है "आपके द्वारा अनुरोधित पृष्ठ हटा दिया गया था" </a> </li> <li class="side_article_list_item"> 7. <a href="http://hi.uwenku.com/question/p-uhfjmnkf-be.html" target="_blank" title="एंड्रॉइड ईएलएम 327/ओबीडी 2 प्रोटोकोल"> एंड्रॉइड ईएलएम 327/ओबीडी 2 प्रोटोकोल </a> </li> <li class="side_article_list_item"> 8. <a href="http://hi.uwenku.com/question/p-bevgazxd-t.html" target="_blank" title="'random.ruffle` का छोटा रनटाइम' Python3"> 'random.ruffle` का छोटा रनटाइम' Python3 </a> </li> <li class="side_article_list_item"> 9. <a href="http://hi.uwenku.com/question/p-ajeewxlm-q.html" target="_blank" title="विरासत में सदस्य को क्यों अनुमति नहीं है?"> विरासत में सदस्य को क्यों अनुमति नहीं है? </a> </li> <li class="side_article_list_item"> 10. <a href="http://hi.uwenku.com/question/p-prllfhfc-n.html" target="_blank" title="जांचें कि परिणाम एक ठीक playframework"> जांचें कि परिणाम एक ठीक playframework </a> </li> </ul> </div> </div> </div> <p class="article-nav-bar"></p> <div class="row sidebar article-nav"> <div class="row box_white visible-sm visible-md visible-lg margin-zero"> <div class="top"> <h3 class="title"><i class="glyphicon glyphicon-th-list"></i> संबंधित मुद्दे</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item">कोई संबंधित समस्या नहीं^_^</li> </ul> </div> </div> </div> </div> </div> </div> </div><!-- wrap end--> <!-- footer --> <footer id="footer"> <div class="bg-simple lt"> <div class="container"> <div class="row padder-v m-t"> <div class="col-xs-8"> <ul class="list-inline"> <li><a href="http://hi.uwenku.com/contact">हमसे संपर्क करें</a></li> <li>© 2020 HI.UWENKU.COM</li> <li><a target="_blank" href="https://beian.miit.gov.cn/">沪ICP备13005482号-4</a></li> <li><script type="text/javascript" src="https://v1.cnzz.com/z_stat.php?id=1280101193&web_id=1280101193"></script></li> <li><a href="http://www.uwenku.com/" target="_blank" title="优文库">简体中文</a></li> <li><a href="http://hk.uwenku.com/" target="_blank" title="優文庫">繁體中文</a></li> <li><a href="http://ru.uwenku.com/" target="_blank" title="поле вопросов и ответов">Русский</a></li> <li><a href="http://de.uwenku.com/" target="_blank" title="Frage - und - antwort - Park">Deutsch</a></li> <li><a href="http://es.uwenku.com/" target="_blank" title="Preguntas y respuestas">Español</a></li> <li><a href="http://hi.uwenku.com/" target="_blank" title="कार्यक्रम प्रश्न और उत्तर पार्क">हिन्दी</a></li> <li><a href="http://it.uwenku.com/" target="_blank" title="IL Programma di chiedere Park">Italiano</a></li> <li><a href="http://ja.uwenku.com/" target="_blank" title="プログラム問答園区">日本語</a></li> <li><a href="http://ko.uwenku.com/" target="_blank" title="프로그램 문답 단지">한국어</a></li> <li><a href="http://pl.uwenku.com/" target="_blank" title="program o park">Polski</a></li> <li><a href="http://tr.uwenku.com/" target="_blank" title="Program soru ve cevap parkı">Türkçe</a></li> <li><a href="http://vi.uwenku.com/" target="_blank" title="Đáp ứng viên">Tiếng Việt</a></li> <li><a href="http://fr.uwenku.com/" target="_blank" title="Programme interrogation Park">Française</a></li> </ul> </div> </div> </div> </div> </div> </footer> <!-- / footer --> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f78a970f17b19a79fc477a3378096f29"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>