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

  • Post author:
  • Post category:php

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