simplexml_load_string奇怪的字符

时间:2012-08-10 15:19:14

标签: php

使用simplexml_load_string我遇到了非标准字符的问题。

我使用file_get_contents加载了一个报纸xml Feed。如果我打印以筛选内容,我会得到其中一篇文章的标题:

<title>&#8216;If Legault were running in Alberta, he&#8217;d be more popular&#8217;: How right-wing is the CAQ?</title>

如果我这样做:

$feed = @simplexml_load_string($xml);

并打印$ feed的结果,标题已更改为:

[title] => �If Legault were running in Alberta, he�d be more popular�: How right-wing is the CAQ?

有关如何阻止这些字符显示的建议吗?

2 个答案:

答案 0 :(得分:0)

这看起来SimpleXML正在创建一个UTF-8字符串,然后在ISO-8859-1(latin-1)或类似于CP-1252的东西中呈现。

当您将结果保存到文件并通过Web服务器提供该文件时,浏览器将使用文件中声明的编码。

包含在网页中 由于您的网页编码不是UTF-8,您需要将字符串转换为您正在使用的编码,例如ISO-8859-1(latin-1)。

使用iconv():

可以轻松完成
$xmlout = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $xmlout);

保存到数据库 您的数据库列未使用UTF-8排序规则,因此您应该使用iconv将字符串转换为数据库使用的字符集。

假设您的数据库排序规则与您呈现的编码相同,则从数据库读取时无需执行任何操作。

解释 在UTF-8中,0xc2前缀字节用于访问“Latin-1 Supplement”块的上半部分,其中包括重音字母,货币符号,分数,上标2和3,版权和注册商标符号等字符,和不间断的空间。

然而在ISO-8859-1中,字节0xC2代表Â。所以,当你的UTF-8字符串被误解为其中之一时,你会得到一些其他无意义的字符。

答案 1 :(得分:0)

这是一个字符集问题。它需要是utf8,您可以在内容上运行utf8_decode,但最好通过将输入(feed)中的字符集与输出(我假设的html页面)匹配来解决此问题。