simplexml编码问题

时间:2012-01-08 14:59:47

标签: php xml encoding simplexml

我不确定这是编码问题还是什么问题,但是我在使用简单的xml和文本中的某些字符时遇到了问题

$xml = <<<HOHOHO
<?xml version="1.0" encoding="iso-8859-2" standalone="yes"?>
<videos>
    <video>
    <ContentProvider>bl abla</ContentProvider>
    <ArtistName>T-Boz</ArtistName>
    <CopyrightLine>(C)2009 SME Espa&#xF1;a, S.</CopyrightLine>
    </video>
</videos>
HOHOHO;

$a = simplexml_load_string ($xml);

foreach ( $a->video as $new ) 
    die($new->CopyrightLine);

事情是,ñ角色变得混乱并变成类似Ă的东西,当它应该是一个ñ。 我觉得奇怪的是,simplexml无论如何都要将它更改为一个角色,而不仅仅是保持原样......

我知道这必须用十六进制代码做一些事情,但我还没有找到解决方案

到目前为止我尝试过的事情: 使用mb_convert_string将字符串转换为iso-8859-2, 使用mb_convert_string将字符串转换为utf-8, 使用html_entity_decode进行转换, 使用html_special字符进行转换

以上所有尝试都无法解析xml或者没有修复角色

帮助我非常感谢!

1 个答案:

答案 0 :(得分:5)

您遇到的问题不是输入字符串,而是输出字符串。 SimpleXML在内部使用UTF-8,如果您从SimpleXMLElement请求一个字符串,您将获得编码为UTF-8的字符串。

$output = (string) $new->CopyrightLine; # will always be UTF-8 encoded

因此您需要使用输出重新编码,而不是输入。

与此code example and output比较,输入为输入时显示为UTF-8。

没有办法解决这个问题,因为SimpleXML总是会给你UTF-8编码的字符串。