PHP';s SimpleXML不处理&#8217 ; 适当地

PHP';s SimpleXML不处理&#8217 ; 适当地,php,xml,rss,simplexml,Php,Xml,Rss,Simplexml,我正在解析一个RSS提要,它有一个’在其中。SimpleXML将此转换为™. 我能做些什么来阻止这一切 为了回答出现的一些问题,我正在使用CURL拉一个RSS提要。如果我将其直接输出到浏览器,’显示为“这是预期的”。当我使用此函数创建一个新的SimpleXMLElement时,(例如,$xml=newSimpleXmlElement($raw_feed)并转储$xml变量,&的每个实例都被替换为“-”™. SimpleXML似乎在使用UTF-8和编码字符时遇到问题。(XML声

我正在解析一个RSS提要,它有一个
在其中。SimpleXML将此转换为™. 我能做些什么来阻止这一切

为了回答出现的一些问题,我正在使用CURL拉一个RSS提要。如果我将其直接输出到浏览器,
显示为“这是预期的”。当我使用此函数创建一个新的SimpleXMLElement时,(例如,
$xml=newSimpleXmlElement($raw_feed)
并转储
$xml
变量,
&
的每个实例都被替换为“-”™.

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

CURL在构建SimpleXML元素之前检索到提要之后,我确实可以控制提要。

&
表示Unicode字符
(U+2019),该字符在UTF-8中用0xE28099编码。当该字节序列被解释为时,它表示字符
(0xE2),
(0x80)和
(0x99)


这意味着SimpleXML将输入处理为UTF-8编码,但您将其输出解释为Windows-1252。除非您真的想使用Windows-1252,否则您可能只是错过了。归结起来,必须在四个位置将默认编码设置为UTF-8:

  • 文件开头的默认区域设置:
    setlocale(LC_ALL,'en_US.UTF8');
  • 对CURL产生的字符串进行编码:
    utf8\u encode($string);
  • 默认情况下,将MySQL连接设置为使用UTF-8:
    mysqli\u set\u字符集($database\u insert\u connection,'utf8');
  • 在MySQL数据库中将适当的排序规则设置为
    utf8\u general\u ci
  • 如果输出到浏览器,则设置适当的标题(例如
    标题('Content-type:text/html;charset=utf-8');


    希望这对将来的人有所帮助!

    解析后,您将如何处理这些值?保存到DB或在浏览器上显示这些值?您希望这些值是什么样子?&8217;或’右单引号“您对RSS有控制权吗?可能包括您的代码吗?