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

Last updated on 2019年3月11日

问题

对网页HTML进行简单信息提取,这里不使用正则而使用 PHP 内建对象 DOMDocument 来做分析。

在读取 HTML 片段

我是中文
时,出现中文乱码。

问题重现

一段 HTML如下:

我是中文

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 错误,可使用 @ 来屏蔽错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值