Press "Enter" to skip to content

php的DOMDocument读取HTML中文乱码问题

问题

对网页HTML进行简单信息提取,这里不使用正则而使用 PHP 内建对象 DOMDocument 来做分析。
在读取 HTML 片段<div id='chinese'>我是中文</div> 时,出现中文乱码。

问题重现

一段 HTML如下:

<p class='particle'>
    <div id='chinese'>我是中文</div>
</p>

PHP代码如下:

$doc = new DOMDocument();
@$doc->loadHTML($html); // 这里直接$html变量代替
$chinese = $doc->getElementById('chinese');
$result = $doc->saveHTML($chinese);
print_r($result);

输出结果出现不可读乱码。

解决

由于 DOMDocument 的 loadHTML 会遵循 w3c 标准去识别,HTML 片段 缺少 meta 编码标签,所以出现乱码,可通过增加编码标签来修正。

$hackEncoding = '<?xml encoding="UTF-8">';
$doc = new DOMDocument();
@$doc->loadHTML($hackEncoding . $html); // 这里带上encode
$chinese = $doc->getElementById('chinese');
$result = $doc->saveHTML($chinese);
print_r($result);

注:网站不标准时会报 warning 错误,可使用 @ 来屏蔽错误

参考:
http://php.net/domdocument.loadhtml#95251

打赏 赞(0)
微信
支付宝
微信二维码图片

微信扫描二维码打赏

支付宝二维码图片

支付宝扫描二维码打赏

One Comment

  1. 小鬼
    小鬼 2019年3月9日

    感谢,对我很有帮助!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Captcha Code