【问题标题】:PHP's DomElement->nodeValue has gobbly-gookPHP DomElement->nodeValue 有 gobbledygook
【发布时间】:2011-05-11 05:42:27
【问题描述】:

我正在使用 PHP 的 DOMElement 控件解析第三方网页。当我在浏览器中使用网页并查看源代码时,它很干净,但是当我通过 DOMElement->nodeValue 参数访问某些节点时,HTML 标记不存在,并且有几个换行符和这个字符 Â。根据this answer,这是出现编码问题时出现的字符。

我还使用以下方法获得了那个 gobbly-gook:

  • simplexml_import_dom($node)->asXML();
  • $doc->saveXML($node);

我的问题是如何在 DOMElement 中简单地获取干净的 HTML 代码?

这是干净的 HTML 代码:

<b>Author:</b> AUTHOR<br>
            <b>ISBN:</b> 9780684857220 <br>
            <b>Edition/Copyright:</b> 7<br>
            <b>Publisher:</b> J+M<br>
            <b>Published Date:</b>  1989<br>

这是 nodeValue 给出的:

                    Â 
                    Author:Â AUTHOR      ISBN:Â 9780684857220 Edition/Copyright:Â 7     Publisher:Â J+M       Published Date:Â 
                    1989

【问题讨论】:

    标签: php xml dom


    【解决方案1】:

    您是否尝试过在创建 DOM 文档时指定编码?例如:

    $doc = new DOMDocument('1.0', 'utf-8');
    $doc->loadXML($third_party_web_page_string);
    

    $doc = new DOMDocument('1.0', 'iso-8859-1');
    $doc->loadXML($third_party_web_page_string);
    

    如果这些都不起作用,您可以在将数据加载到 DOM 对象之前尝试对数据使用 iconv 函数。

    【讨论】:

    • 这解决了编码问题,但标签不存在。原来问题是我使用的方法
    【解决方案2】:

    原来这不是编码问题,而是我使用了错误的方法。这有效:

    $doc = new DOMDocument();
    $doc->appendChild($doc->importNode($second_td,true)); 
    echo $doc->saveHTML();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 2014-06-25
      • 2017-09-16
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 2012-01-31
      相关资源
      最近更新 更多