我正在使用simplexml_load_string
将XML文档加载到对象中。在我遇到这个元素之前,这似乎很有效:
<some_string_val>1.     Some text.</some_string_val>
运行simplexml_load_string
之后,出现的是:
["some_string_val"]=> string(20) "1.    Some text"
我尝试使用:
html_entity_decode($string, ENT_QUOTES, "Windows-1252");
这似乎将 
转换为纯文本,但当我尝试通过simplexml_load_string
运行时,我得到了相同的结果。我也尝试过使用UTF-8和其他一些类似或更差的结果。
那么,我可以做些什么来将 
转换为UTF-8,以便simplexml_load_string
正确解析它?保持HTML实体不变不是一个问题,因为这将进入CSV。
编辑:由于以下几个原因,这被不公正地标记为重复:
答案 0 :(得分:0)
我认为它解析正确。它只是函数的工作方式,用特殊字符替换这些代码。
您可以修复结果字符串,将其转换为cp1251
$str = iconv('utf-8', 'cp1251', $str);
此外,我会在将其写入CSV文件之前删除双倍空格
$str = str_replace(chr(160), ' ', $str);
$str= trim(preg_replace('/\s+/', ' ', $str));
答案 1 :(得分:0)
SimpleXML本身没有问题来正确解析XML:
$string = '<some_string_val>1.     Some text.</some_string_val>';
$xml = simplexml_load_string($string);
echo $xml;
输出(Demo):
1. Some text.
在您读完UTF-8字符串(C2 A0
)之后会发生什么,您将它发送到某个地方并告诉某处不是它是UTF-8编码的,而是使用不同的编码。很可能是Latin-1,我不得不猜测,你没有与你的问题分享这类信息。
然后,某处将二进制序列C2 A0
显示为两个字符:
C2
ÂA0
“”(没有休息空间)例如:您需要写入CSV文件。您可以在其中编写UTF-8编码的数据。当您在电子表格应用程序中打开CSV文件时,它应该询问您有关编码的信息。告诉它使用Unicode UTF-8编码。一切都很好。
如果您在浏览器中显示该阵列(这是我阅读您的问题的方式),请告诉您的浏览器该网站是UTF-8。您应该在Web浏览器菜单中找到“编码”设置来执行此操作。