Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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 如何正确解码XML文件中的特殊字符?_Php_Xml_Unicode_Character Encoding_Libxml2 - Fatal编程技术网

Php 如何正确解码XML文件中的特殊字符?

Php 如何正确解码XML文件中的特殊字符?,php,xml,unicode,character-encoding,libxml2,Php,Xml,Unicode,Character Encoding,Libxml2,在我正在解析的一些XML文件(通常是RSS)中,我遇到了一些包含字符的文本,例如今天最新的,它正在成为今天的样式™从节点提取文本后,将显示最新的。这说明我没有正确处理解码过程 我可以简单地修复这一个bug,但如果有许多其他字符变得乱码呢?在将XML文件转换为UTF-8脚本时,在不破坏编码的情况下对其进行摘要的正确方法是什么 以下是我尝试过的一些似乎不太有效的方法: $xml = file_get_contents($file); // One: still contains ’ //$xm

在我正在解析的一些XML文件(通常是RSS)中,我遇到了一些包含字符的文本,例如
今天最新的
,它正在成为
今天的样式™从节点提取文本后,将显示最新的
。这说明我没有正确处理解码过程

我可以简单地修复这一个bug,但如果有许多其他字符变得乱码呢?在将XML文件转换为UTF-8脚本时,在不破坏编码的情况下对其进行摘要的正确方法是什么

以下是我尝试过的一些似乎不太有效的方法:

$xml = file_get_contents($file);

// One: still contains ’
//$xml = @iconv('UTF-8', 'UTF-8//IGNORE', $xml);

// Two: LibXMLError Entity 'rsquo' not defined
//$xml = htmlentities($xml, null, 'UTF-8');
//$xml = htmlspecialchars_decode($xml, ENT_QUOTES);

// Three: still contains ’
//$xml = mb_convert_encoding($xml, "UTF-8", "UTF-8");

$xml = simplexml_load_string($xml, null, LIBXML_NOCDATA | LIBXML_NOENT);
尝试一下:

$xml=simplexml_load_string($xml,null,LIBXML_NOCDATA | LIBXML_NOENT);

$xml->addAttribute('encoding','UTF-8')

检查如何输出内容。 如果输出目标不支持UTF-8,也可能发生这种情况

我假设您将输出到浏览器,所以请检查浏览器编码并尝试显式地将其设置为UTF-8,因为您可能从XML中获得正确的文本,但它只是显示错误


如果上面没有帮助,还可以尝试加载XML,检查如何输出内容。如果输出目标不支持UTF-8,也可能发生这种情况。我假设您将输出到浏览器,所以请检查浏览器编码并尝试显式地将其设置为UTF-8,因为您可能从XML中获得正确的文本,但它只是显示错误。如果上面没有帮助,还可以尝试用DOMDocument加载XML@zysoft,解决了
问题™问题!由于XML越来越大,我停止使用CLI进行调试,转而使用浏览器。我真不敢相信我忘了检查我的标题<代码>标题('Content-Type:text/html;charset=“UTF-8”)@Xeoncross,我将把它作为答案发布。很高兴它帮助了你<代码>标题('Content-Type:text/html;charset=“UTF-8”)