PHP - 解析UTF-8 XML

时间:2012-12-12 23:30:02

标签: php xml utf-8

我无法使用simple_xml解析XML(来自YouTube),在文本节点中有下一个符号:

↓ ‘ ’

这些符号在MacOS Safari浏览器中输入,并保存为视频注释。

XML已编码为UTF8,但如果我将文件保存到磁盘 - 引号符号将显示奇怪的字符代码x92,x93(记事本++,utf8)。

如果我在firefox中打开这个XML然后保存它会从磁盘读取,php解析它没有问题。 如果我直接从url解析xml或使用file_get_contents解析崩溃。

同时将字符保存为文件↓ - 那么如何转换回箭头?

我尝试iconvmb_convert但到目前为止没有任何帮助。

感谢您的帮助,这里我附上两个XML:首先是问题xml(https://www.box.com/s/fgp5rih5s3dgx5y328gh),我读取并保存在PHP中;第二个是我使用下载管理器程序(https://www.box.com/s/fgp5rih5s3dgx5y328gh)或通过阅读并保存在网络浏览器(FireFox)中。

此外,我将处理使用中国,日本和阿拉伯字符的数据(来自其他视频):)))

1 个答案:

答案 0 :(得分:2)

如果您只是使用来自php的youtube的xml api,数据已经是utf-8而且您不需要做任何复杂的事情,这将有效:

<?php
header("Content-Type: text/html; charset=utf-8");
$url = "https://gdata.youtube.com/feeds/api/videos?q=%E2%82%ACuro";
$el = simplexml_load_file( $url );
print_r( $el );

如果你没有在内容类型标题中使用正确的字符集,唯一不适合你的原因就是。


在Windows-1252中,这些引用分别是0x910x920x93实际上是),因此我怀疑您的文件位于Windows-1252中。 / p>

header("Content-Type: text/html; charset=utf-8");
$str = file_get_contents("myfile.txt");
echo html_entity_decode(
       mb_convert_encoding( $str, "UTF-8", "Windows-1252"),
       ENT_QUOTES, 
       "UTF-8"
);