2

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

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

我确定它与字符集有关。

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

提前致谢。

4

4 回答 4

7

我有同样的问题,现在注意到 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;
}
于 2012-11-14T00:16:49.490 回答
3

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

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

PHP很奇怪:)

于 2011-05-10T06:28:16.250 回答
2

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

// Create a DOMDocument instance 
$doc = new DOMDocument();

// The fix: mb_convert_encoding conversion
$doc->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'));

来源和更多信息

于 2018-07-13T15:49:55.973 回答
1

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

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

于 2010-01-08T02:09:53.240 回答