2012-10-01 46 views
4

我运行下面的代码:DOMDocument打破编码?

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

它输出以下内容:

资料来源:A

DOM:谩

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

回答

3

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

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

+0

谢谢,utf8_decode做的工作。 – Mike

+0

刚刚也遇到了这个问题,不幸的是遇到了一个utf8_decode无法帮助的情况。 iconv(“UTF-8”,“CP1252”,$ data)来拯救! (更多信息:http://us2.php.net/manual/en/function.utf8-decode.php#104907) – MBaas

8

下面是通过元头部添加了正确的编码解决方法:

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

我不知道这是实际的字符集,你正在尝试使用,但调整必要

另请参阅:domdocument character set issue

+0

谢谢,这也适用。 – Mike

+0

Domdocument对文档编码的解析似乎被破坏了。此外,这种解决方法是我可以不破坏UTF-8页面的文本内容的唯一方式,它无法识别为utf-8。 –