【发布时间】:2013-08-01 12:30:15
【问题描述】:
我使用 simpleXML 来处理 xml 文件。它有西里尔字母。我还使用dom_import_simplexml、importNode 和appendChild 将树从一个文件复制到另一个文件并从一个地方复制到另一个地方。
在处理结束时,我执行print_r 的结果simpleXmlElement,一切正常。但我也这样做了asXml('outputfile.xml') 并且发生了一些奇怪的事情:所有没有用CDATA 包裹的西里尔字符(一些标签主体和所有属性)都更改为它们的 unicode 代码。
例如print_r的输出(只是一个片段):
SimpleXMLElement Object ( [@attributes] => Array
( [NAME] => Государственный аппарат и механизм
[COSTYES] => 3.89983579639 [COSTNO] => 0
[ID] => 9 )
[COMMENTYES] => Вы совершенно правы.
[COMMENTNO] => Нет, Вы ошиблись. ) ) )
但在asXml 生成的文件中,我得到如下内容:
<QUEST NAME="Теория#x434;вухмечей"
style="educ" ID="1">
<DESC><![CDATA[Теория происхождения государства, известная как теория "двух мечей" [2, с.40],
представляет из себя...
]]></DESC>`
我在任何可能的地方都设置了 utf-8 语言环境,用谷歌搜索了“simplexml、unicode、西里尔文、asXml 等”的每个组合,但没有任何效果。
UPD 看起来像 htmlentities() 使用的某些函数。因此,感谢voitcus,解决方案是按照here 的建议使用html_entity_decode()。
【问题讨论】:
-
请阅读手册中的讨论(cmets):php.net/manual/en/simplexmlelement.asxml.php
-
例如this one
-
谢谢,成功了。我现在想知道,我怎么不是靠自己来解决这个问题的。
标签: php unicode internationalization simplexml cyrillic