PHP的SimpleXML没有处理';正确

时间:2011-01-12 08:09:32

标签: php xml rss simplexml

我正在解析其中包含’的RSS Feed。 SimpleXML将其转变为“。”。我该怎么做才能阻止这个?

回答一些问题 - 我正在使用CURL提取RSS源。如果我将其直接输出到浏览器,’将显示为“预期的内容”。当我使用此方法创建新的SimpleXMLElement时(例如$xml = new SimpleXmlElement($raw_feed);并转储$xml变量),’的每个实例都会被替换为“。

似乎SimpleXML在使用UTF-8&符编码字符时遇到问题。 (XML声明指定UTF-8。)

在CURL检索Feed之后,我确实可以控制Feed,然后才能用它来构建SimpleXML元素。

2 个答案:

答案 0 :(得分:2)

’表示以UTF-8中的0xE28099编码的Unicode字符(U + 2019)。当用Windows-1252解释该字节序列时,它表示字符â(0xE2),(0x80)和(0x99)。

这意味着SimpleXML将输入处理为UTF-8编码,但您将其输出解释为Windows-1252。除非你真的想使用Windows-1252,否则你可能只是缺少specify the character encoding of your output properly

答案 1 :(得分:0)

归结为必须在四个地方将默认编码设置为UTF-8:

  1. 文件头部的默认语言环境:setlocale(LC_ALL, 'en_US.UTF8');
  2. 编码来自CURL的字符串:utf8_encode($string);
  3. 默认情况下,将MySQL连接设置为使用UTF-8:mysqli_set_charset($database_insert_connection, 'utf8');
  4. 将MySQL数据库中的相应排序规则设置为utf8_general_ci
  5. 如果输出到浏览器,请设置相应的标题(例如header ('Content-type: text/html; charset=utf-8');

    希望这可以帮助将来的某个人!