PHP - Parse UTF-8 XML



我在使用simple_XML解析XML(来自YouTube)时遇到问题,该XML在文本节点中有下一个符号:

↓ ‘ ’

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

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

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

也向下箭头字符保存到文件中作为↓-那么如何转换回箭头?

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

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

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

如果你只是从php中使用youtube的xmlapi,数据已经是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中,这些引号分别是0x910x92(0x93实际上是),所以我怀疑您的文件在Windows-1252。

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"
);

最新更新