我在使用simple_XML解析XML(来自YouTube)时遇到问题,该XML在文本节点中有下一个符号:
↓ ‘ ’
这些符号是在MacOS Safari浏览器中键入的,并保存为视频注释。
XML编码为UTF8,但如果我将文件保存到磁盘,引号符号将显示为奇怪的字符代码x92,x93(notepad++,UTF8)。
如果我在firefox中打开这个XML,然后保存它,将从磁盘读取,php解析它时不会出现问题。如果我直接从url或使用file_get_contents
解析xml,解析就会崩溃。
也向下箭头↓
字符保存到文件中作为↓
-那么如何转换回箭头?
我试过iconv
、mb_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中,这些引号分别是0x91
和0x92
(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"
);