【问题标题】:nodeValue from DOMDocument returning weird characters in PHP来自DOMDocument的nodeValue在PHP中返回奇怪的字符
【发布时间】:2011-01-02 18:11:12
【问题描述】:

所以我正在尝试解析 HTML 页面并使用 get_elements_by_tag_name('p'); 查找段落 (<p>)

问题是当我使用$element->nodeValue 时,它返回了奇怪的字符。文档首先使用 curl 加载到 $html 中,然后将其加载到 DOMDocument 中。

我确定这与字符集有关。

这是一个响应示例:“aujourd’hui”。

提前致谢。

【问题讨论】:

标签: php character-encoding domdocument nodevalue


【解决方案1】:

我遇到了同样的问题,现在注意到 loadHTML() 不再需要 2 个参数,所以我必须找到不同的解决方案。在我的 DOM 库中使用以下函数,我能够从我的 HTML 内容中删除时髦的字符。

private static function load_html($html)
{
    $doc = new DOMDocument;
    $doc->loadHTML('<?xml encoding="UTF-8">' . $html);

    foreach ($doc->childNodes as $node)
        if ($node->nodeType == XML_PI_NODE)
            $doc->removeChild($node);

    $doc->encoding = 'UTF-8';

    return $doc;
}

【讨论】:

    【解决方案2】:

    我通过强制转换为 UTF-8 来解决此问题,即使原始文本是 UTF-8:

    $text = iconv("UTF-8", "UTF-8", $text);
    $dom = new SmartDOMDocument();
    $dom->loadHTML($webpage, 'UTF-8');
    .
    .
    echo $node->nodeValue;
    

    PHP 很奇怪 :)

    【讨论】:

      【解决方案3】:

      显然对我来说以上都不起作用,最后我发现了以下内容:

      // Create a DOMDocument instance 
      $doc = new DOMDocument();
      
      // The fix: mb_convert_encoding conversion
      $doc->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'));
      

      Source and more info

      【讨论】:

        【解决方案4】:

        这是一个编码问题。尝试将编码显式设置为 UTF-8。

        这应该会有所帮助:http://devzone.zend.com/article/8855

        【讨论】:

        • 已经试过了,但是没有用...有趣的是,如果我执行 $doc->saveHTML(),返回的 html 的编码是完全正确的。
        • HTML 中指定的&lt;meta http-equiv="Content-type" ... /&gt; 是什么?
        猜你喜欢
        • 1970-01-01
        • 2021-03-09
        • 1970-01-01
        • 2013-06-06
        • 2019-07-05
        • 2017-07-04
        • 2018-03-11
        • 2019-07-27
        • 1970-01-01
        相关资源
        最近更新 更多