PHP DOMDocument loadHTML 未正确编码 UTF-8
尝试使用 DOMDocument::loadHTML() 解析 HTML 时,您可能会遇到问题使用正确的 UTF-8 编码。默认情况下,DOMDocument 将输入字符串视为 ISO-8859-1,这在处理 UTF-8 数据时可能会导致错误。
解决方案:
确保正确编码,您可以采用各种方法:
前置编码声明: 添加 XML 编码声明或 HTML 元字符集声明以指示 UTF-8 字符的存在:
$contentType = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">'; $dom->loadHTML($contentType . $profile);
使用SmartDOMDocument: 如果输入 HTML 可能已包含声明,请使用 SmartDOMDocument 库来解决潜在的冲突:
$dom->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8'));
替代方案: 在 PHP 8.2 中,使用 mb_encode_numericentity() 进行更安全的编码选项:
$dom->loadHTML(mb_encode_numericentity($profile, [0x80, 0x10FFFF, 0, ~0], 'UTF-8'));
HTML5 注意事项:
DOMDocument 使用 HTML4 解析器。对于 HTML5 文档,请考虑使用专为 HTML5 合规性而设计的替代 HTML 解析器。
示例:
以下代码演示了如何使用 mb_convert_encoding() 来纠正不正确的 UTF-8编码:
$profile = ""; $dom = new DOMDocument(); $dom->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8')); echo $dom->saveHTML();イリノイ州シカゴにて、アイルランド系の家庭に、9人兄弟の5番目として
以上是为什么我的 PHP DOMDocument::loadHTML() 无法正确处理 UTF-8 编码?的详细内容。更多信息请关注PHP中文网其他相关文章!