首页 > 后端开发 > php教程 > 为什么我的 PHP DOMDocument::loadHTML() 无法正确处理 UTF-8 编码?

为什么我的 PHP DOMDocument::loadHTML() 无法正确处理 UTF-8 编码?

Barbara Streisand
发布: 2024-12-28 00:43:10
原创
203 人浏览过

Why is my PHP DOMDocument::loadHTML() Not Handling UTF-8 Encoding Correctly?

PHP DOMDocument loadHTML 未正确编码 UTF-8

尝试使用 DOMDocument::loadHTML() 解析 HTML 时,您可能会遇到问题使用正确的 UTF-8 编码。默认情况下,DOMDocument 将输入字符串视为 ISO-8859-1,这在处理 UTF-8 数据时可能会导致错误。

解决方案:

确保正确编码,您可以采用各种方法:

  • 前置编码声明: 添加 XML 编码声明或 HTML 元字符集声明以指示 UTF-8 字符的存在:

    $contentType = '<meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;>';
    $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 = "

イリノイ州シカゴにて、アイルランド系の家庭に、9人兄弟の5番目として

"; $dom = new DOMDocument(); $dom->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8')); echo $dom->saveHTML();
登录后复制

以上是为什么我的 PHP DOMDocument::loadHTML() 无法正确处理 UTF-8 编码?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板