You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DomDocument无法显示特殊字符(UTF-8编码打印问题)

解决DomDocument解析UTF-8法语文件时的特殊字符乱码问题
  • 问题根源:libxml的loadHTML方法默认会将无明确编码声明的内容当作ISO-8859-1处理,即便文件本身是UTF-8编码,也会导致重音字符(如é)被错误转码成乱码(如é)。

  • 解决方案:在加载HTML内容前,手动添加UTF-8编码的meta声明,强制libxml识别正确编码。

修改后的代码示例:

$this->doc = new \DomDocument('1.0', 'UTF-8');

$url = $this->file_get_contents_utf8('/file.html');

// 在HTML内容开头插入UTF-8编码声明
$encodedContent = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">' . $url;

$array = [];
$internalErrors = libxml_use_internal_errors(true);

// 去掉@符号,建议后续处理libxml错误以排查问题
$this->doc->loadHTML($encodedContent);
$str = $this->doc->saveHTML($this->doc);

$xpath = new \DOMXpath($this->doc);

// 恢复原有的libxml错误处理设置
libxml_use_internal_errors($internalErrors);

额外说明:

  • 如果原HTML文件本身已包含<meta charset="UTF-8">,但仍出现乱码,可能是该声明位置过晚(未在<head>最前端),可以尝试替换或确保编码声明在内容最开头。
  • 尽量避免用@屏蔽错误,保留libxml错误处理能帮助快速定位其他潜在问题。

内容的提问来源于stack exchange,提问作者clochar dasso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:27:40