【问题标题】:DOMDocument loadHTML doesn't work properly on a serverDOMDocument loadHTML 在服务器上无法正常工作
【发布时间】:2012-08-02 21:53:03
【问题描述】:

我首先在 MAMP 上运行代码,它运行良好。但是当我尝试在另一台服务器上运行代码时,我收到了很多警告,例如:

警告:DOMDocument::loadHTML():意外的结束标记:实体中的头部, 行:第 17 行 /cgihome/zhang1/html/cgi-bin/getPrice.php 中的 3349 警告:DOMDocument::loadHTML(): htmlParseStartTag: 标记错位 实体,行:3350 in /cgihome/zhang1/html/cgi-bin/getPrice.php on 第 17 行警告:DOMDocument::loadHTML(): Tag header invalid in 实体,行:3517 in /cgihome/zhang1/html/cgi-bin/getPrice.php on 第 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');
?>

有人知道发生了什么吗?谢谢!

【问题讨论】:

    标签: php dom


    【解决方案1】:

    要禁用警告,您可以使用

    libxml_use_internal_errors(true);
    

    这对我有用。 Manual

    背景:您正在加载无效的 HTML。无效的 HTML 很常见,DOMDocument::loadHTML 纠正了大部分问题,但默认给出警告。

    使用libxml_use_internal_errors,您可以控制该行为。在加载文档之前设置它:

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

    【讨论】:

    • 另外,不要忘记访问手册页以了解将来会产生一些错误的功能。您经常会在那里找到有用的注释和使用信息。还有用户cmets。见DOMDocument::loadHTML
    • @user1577801:如果此答案解决了您的问题,请考虑通过单击答案分数下方的绿色大勾号来支持并接受它。
    【解决方案2】:

    这个问题与非xHTML代码有关

    由于 DOMdocument() 只能处理 clean XHTML 你需要清理你的代码

    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);
    

    【讨论】:

      【解决方案3】:

      您可以像这样隐藏警告:

      @$doc->loadHTML($amazon);
      

      【讨论】:

        猜你喜欢
        • 2017-06-02
        • 1970-01-01
        • 2011-02-27
        • 2013-08-10
        • 1970-01-01
        • 1970-01-01
        • 2012-01-20
        • 2019-08-04
        相关资源
        最近更新 更多