gpt4 book ai didi

php - UTF-8 与 PHP DOMDocument loadHTML?

转载 作者:可可西里 更新时间:2023-11-01 00:29:50 26 4
gpt4 key购买 nike

考虑这个例子,test.php:

<?php
$mystr = "<p>Hello, με काचं ça øy jeść</p>";
var_dump($mystr);
$domdoc = new DOMDocument('1.0', 'utf-8'); //DOMDocument();
$domdoc->loadHTML($mystr); // already here corrupt UTF-8?
var_dump($domdoc);
?>

如果我使用 PHP 5.5.9 (cli) 运行它,我会进入终端:

$ php test.php 
string(50) "<p>Hello, με काचं ça øy jeść</p>"
object(DOMDocument)#1 (34) {
["doctype"]=>
string(22) "(object value omitted)"
...
["actualEncoding"]=>
NULL
["encoding"]=>
NULL
["xmlEncoding"]=>
NULL
...
["textContent"]=>
string(70) "Hello, με à¤à¤¾à¤à¤ ça øy jeÅÄ"
}

显然,原始字符串是正确的 UTF-8,但 DOMDocument 的 textContent 编码不正确。

那么,如何在 DOMDocument 中获取正确的 UTF-8 内容?

最佳答案

DOM extension建立在 libxml2 上它的 HTML 解析器是为 HTML 4 制作的——默认编码是 ISO-8859-1。除非它遇到适当的元标记或 XML 声明,否则 loadHTML()将假定内容为 ISO-8859-1。

创建 DOMDocument 时指定编码正如您所做的那样,不会影响解析器的工作 - 加载 HTML(或 XML)会替换您为其构造函数提供的 xml 版本和编码。


解决方法:

第一次使用mb_convert_encoding()将 ASCII 范围以上的任何内容转换为其等效的 html 实体。

$domdoc->loadHTML(mb_convert_encoding($mystr, 'HTML-ENTITIES', 'UTF-8'));

或者修改指定 UTF-8 的元标记或 xml 声明。

$domdoc->loadHTML('<meta http-equiv="Content-Type" content="charset=utf-8" />' . $mystr);
$domdoc->loadHTML('<?xml encoding="UTF-8">' . $mystr);

关于php - UTF-8 与 PHP DOMDocument loadHTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39148170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com