DOMDocument打破编码?

Mik*_*ike 5 php encoding domdocument

我运行以下代码:

$page = '<p>Ä</p>';
$DOM = new DOMDocument;
$DOM->loadHTML($page);
echo 'source:'.$page;
echo 'dom: '.$DOM->getElementsByTagName('p')->item (0)->textContent;
Run Code Online (Sandbox Code Playgroud)

它输出以下内容:

来源:Ä

dom:Ã

所以,我不明白为什么当文本通过DOMDocument时它的编码被破坏了?

Ja͢*_*͢ck 8

这是一种通过元头添加正确编码的解决方法:

$DOM->loadHTML('<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />' . $page);
Run Code Online (Sandbox Code Playgroud)

我不确定这是否是您尝试使用的实际字符集,但在必要时进行调整

另请参阅:domdocument字符集问题


Nie*_*sol 5

DOMDocument似乎将输入视为UTF-8。在此转换中,Ä变为Ä。这有个要点:第二个字符在ISO-8859-1中不存在,但在Windows-1252中确实存在。这就是为什么在输出中看不到第二个字符的原因。

您可以通过调用utf8_decode的输出textContent或使用UTF-8作为页面的字符编码来解决此问题。