来自DomDocument的nodeValue在PHP中返回奇怪的字符

时间:2010-01-08 02:05:11

标签: php character-encoding domdocument nodevalue

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

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

我确定它与字符集有关。

以下是回复的一个例子:“aujourd⢢”。

提前致谢。

4 个答案:

答案 0 :(得分:4)

我有同样的问题,现在注意到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;
}

答案 1 :(得分:3)

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

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

PHP很奇怪:)

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

显然,对我来说,以上方法均无效,最后我发现了以下内容:

// 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