使用simplexml_load_string我遇到了非标准字符的问题。
我使用file_get_contents加载了一个报纸xml Feed。如果我打印以筛选内容,我会得到其中一篇文章的标题:
<title>‘If Legault were running in Alberta, he’d be more popular’: 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?
有关如何阻止这些字符显示的建议吗?
答案 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页面)匹配来解决此问题。