Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-解析UTF-8XML_Php_Xml_Utf 8 - Fatal编程技术网

PHP-解析UTF-8XML

PHP-解析UTF-8XML,php,xml,utf-8,Php,Xml,Utf 8,我无法使用simple_XML解析XML(来自YouTube),该XML在文本节点中具有下一个符号: ↓ ‘ ’ 这些符号在MacOS Safari浏览器中键入,并保存为视频注释 XML编码为UTF8,但如果我将文件保存到磁盘,引号符号将显示为奇怪的字符代码x92、x93(记事本++,UTF8) 如果我在firefox中打开这个XML,然后保存它,它将从磁盘读取,php将在没有问题的情况下解析它。 如果我直接从url解析xml,或者使用file\u get\u contents,解析就会崩溃

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

↓ ‘ ’
这些符号在MacOS Safari浏览器中键入,并保存为视频注释

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

如果我在firefox中打开这个XML,然后保存它,它将从磁盘读取,php将在没有问题的情况下解析它。 如果我直接从url解析xml,或者使用
file\u get\u contents
,解析就会崩溃

同样向下箭头
字符另存为文件
-那么如何转换回箭头

我尝试了
iconv
mb_convert
,但到目前为止没有任何帮助

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


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

如果您只是从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 );

您能告诉我们一些麻烦的XML本身吗?获取您在尝试解析时看到的完整而准确的错误消息以及您正在使用的代码也会很有帮助。请将此编辑到您的问题中。请发布您看到的屏幕截图或更多详细信息。这是两个XML:第一个是问题XML(),我阅读并保存在PHP中;第二个是使用下载管理器程序()或通过在网络浏览器(FireFox)@Ninsuo中读取并保存,它是
#x2193在他的文件中,即纯ascii字符
x
2
1
9
3
这就是
hmtl\u entity\u decode
的内容,因为二进制值不匹配,所以它不能是Windows-1252(这在给定的Mac上下文中有一定意义)。@hakre是的,我在回答中注意到了这一点(说
0x93
实际上是
)。Mac上下文是什么?Notepad++是Windows编辑器。“这些符号是在MacOS Safari浏览器中键入的,并保存为视频批注。”@hakre是的,它们是在MacOS中键入的,然后浏览器在保存时将数据以utf-8的形式发送到youtube服务器。然后OP向youtube发出API请求,要求将批注以XML的形式返回,youtube将其以utf-8的形式发送给他(很可能),然后他用utf-8以外的其他编码将其保存到磁盘,现在他无法读取该文件。
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"
);