我无法弄清楚如何阻止DOMDocument破坏这些字符.
<?php
$doc = new DOMDocument();
$doc->substituteEntities = false;
$doc->loadHTML('<p>¯\(°_o)/¯</p>');
print_r($doc->saveHTML());
?>
Run Code Online (Sandbox Code Playgroud)
预期输出:¯(°_o)/¯
实际输出:¯(°_o)/¯¯
我正在尝试解析一些包含一些 HTML 实体的 HTML,例如 ×
$str = '<a href="http://example.com/"> A × B</a>';
$dom = new DomDocument;
$dom -> substituteEntities = false;
$dom ->loadHTML($str);
$link = $dom ->getElementsByTagName('a') -> item(0);
$fullname = $link -> nodeValue;
$href = $link -> getAttribute('href');
echo "
fullname: $fullname \n
href: $href\n";
Run Code Online (Sandbox Code Playgroud)
但是 DomDocument 将文本替换为 A × B。
有什么方法可以防止它为 HTML 实体使用 & 并让它不理会它吗?我试图将替换实体设置为假,但它没有做任何事情
考虑这个例子,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);
?>
Run Code Online (Sandbox Code Playgroud)
如果我用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ÅÄ"
}
Run Code Online (Sandbox Code Playgroud)
显然,原始字符串正确为UTF-8,但textContentDOMDocument的字符串编码不正确.
那么,如何在DOMDocument中将内容作为正确的UTF-8获取?