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

PHP 8中如何从含西里尔字母的HTML获取DOMDocument?

PHP 8 替代 mb_convert_encoding 处理含西里尔字母HTML的方案

在PHP 8中,mb_convert_encoding处理HTML实体的方式被弃用,针对你解析含西里尔字母HTML的需求,推荐以下两种替代方案:

方案1:直接让DOMDocument识别UTF-8编码(优先推荐)

原来的转实体操作本质是为了避免DOMDocument默认用ISO-8859-1解析导致的乱码,其实可以通过以下两种方式直接让DOMDocument识别UTF-8,无需转实体:

方式A:在HTML头部添加UTF-8 meta标签

$pageHTML = '<!doctype html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<div>Текст</div>
</body>
</html>';

$dom = new DOMDocument;
// 禁用libxml错误输出以避免无关警告
libxml_use_internal_errors(true);
$dom->loadHTML($pageHTML);
libxml_clear_errors();

echo $dom->getElementsByTagName('div')[0]->textContent;

方式B:添加XML编码声明并使用LIBXML选项

$pageHTML = '<!doctype html>
<html>
<head>
</head>
<body>
<div>Текст</div>
</body>
</html>';

$dom = new DOMDocument;
libxml_use_internal_errors(true);
// 在HTML内容前添加UTF-8编码声明,同时禁用默认的DOCTYPE和html/body标签补全
$dom->loadHTML('<?xml encoding="UTF-8">' . $pageHTML, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
libxml_clear_errors();

echo $dom->getElementsByTagName('div')[0]->textContent;

方案2:使用htmlentities转换HTML实体

如果业务场景确实需要将UTF-8字符转为HTML实体,可以用htmlentities替代:

$pageHTML = '<!doctype html>
<html>
<head>
</head>
<body>
<div>Текст</div>
</body>
</html>';

// 指定编码为UTF-8,ENT_QUOTES转义单双引号,ENT_SUBSTITUTE替换无效UTF-8字符
$pageHTML = htmlentities($pageHTML, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');

$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($pageHTML);
libxml_clear_errors();

echo $dom->getElementsByTagName('div')[0]->textContent;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:30:49