PHP DOMDocument 文档表明它支持开箱即用的 UTF-8 编码,但正如提供的代码示例所示,这并不总是案件。出现此问题的原因是 DOMDocument::loadHTML() 需要特定编码的 HTML 字符串,该编码历史上为 ISO-8859-1 (Latin-1)。
为了解决这个问题,我们需要将字符串转换为 DOMDocument 可以处理的编码。一种选择是将非 ASCII 字符转换为 HTML 实体,从而有效地转义它们。这可以使用 mb_convert_encoding() 函数和“HTML-ENTITIES”目标编码来实现。
另一种方法是提示文档的编码通过添加 标记到 HTML 字符串的开头。此标签指定字符集,在本例中为 UTF-8:
<meta http-equiv="content-type" content="text/html; charset=utf-8">
此元标签将自动放置在
中。文档部分,确保 DOMDocument 正确识别编码。这是一个演示 HTML 实体使用的示例:
$html = '<meta http-equiv="content-type" content="text/html; charset=utf-8">
<html><head><title>Test!</title></head><body><h1>☆ Hello ☆ World ☆</h1></body></html>';
$dom = new DOMDocument('1.0', 'utf-8');
$dom->loadHTML($html);
header('Content-Type: text/html; charset=utf-8');
echo($dom->saveHTML());
通过使用无论哪种方法,我们都可以确保 DOMDocument 能够正确处理 UTF-8 字符,让程序输出想要的结果:
<meta http-equiv="content-type" content="text/html; charset=utf-8">Test! ☆ Hello ☆ World ☆
以上是为什么 DOMDocument 在 PHP 中加载 HTML 字符串时会遇到 UTF-8 编码问题?的详细内容。更多信息请关注PHP中文网其他相关文章!