我不确定这是编码问题还是什么问题,但是我在使用简单的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ñ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或者没有修复角色
帮助我非常感谢!
答案 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编码的字符串。