1

我在使用 simplexml_load_string 处理非标准字符时遇到了困难。

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

<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?

关于如何阻止这些字符像这样显示的任何建议?

4

2 回答 2

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 字符串被误解为其中之一时,您会得到 Â 后跟其他一些无意义的字符。

于 2012-08-10T15:23:27.443 回答
0

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

于 2012-08-10T15:24:11.670 回答