PHP DOM读取“Ô而不是“é”

时间:2013-06-12 15:49:01

标签: php dom utf-8

我正在处理来自UTF8数据库的UTF8数据,而我遇到UTF8编码问题。

  1. 原始内容从数据库中正确提取,我在UTF8终端中看到“é”:

    Site de la Préfecture de Police
  2. 然后,当我通过使用DOM操作的PHP函数传递此内容时,我看到:

    Site de la Préfecture de Police
  3. 我们可以看到DOM读取了`é`代替'é`并用HTML实体é替换`é`。

  4. 之后,我再次通过DOM函数,我得到另一个奇怪的转换:

    { {2}}

现在它看起来像é的十六进制编码:%C3 %A9

你知道发生了什么吗?

2 个答案:

答案 0 :(得分:3)

尝试使用charset:iso-8859-1而不是UTF-8 或者一定要在你的html标题中设置charset:

PHP : header('Content-type: text/html; charset=utf-8');
HTML: <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

答案 1 :(得分:3)

好的,找到了!

涉及问题的两个PHP函数:

  • html_entity_decode正在使用ISO-8859-1
  • $dom->loadHTML($xml)正在使用ASCII

我通过设置所需的字符集来修复:

  • html_entity_decode( $newContent, ENT_NOQUOTES, 'UTF-8' );
  • $dom->loadHTML('<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>' . $xml . '</body></html>');