通过cURL检索的XML中的Mojibake问题

时间:2015-09-28 12:48:46

标签: php xml curl encoding mojibake

我正在通过PHP cURL检索this XML feed并将其输出到我页面上的textarea中。问题是,它回来了充满了mojibake字符。饲料本身很好;只有在我的页面上输出字符时才会显示。

例如,英镑符号(£)以英镑回归。

我已尝试在问题上抛出UTF-8,如this question的答案所示。

ini_set('default_charset', 'UTF-8');
header("Content-Type:text/html; charset=UTF-8");

在HTML中:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

甚至通过utf8_encode()输出cURL回复,但仍然存在。

$ch = curl_init($feed_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$xml = curl_exec($ch);
echo '<textarea>'.utf8_encode($xml).'</textarea>';

我甚至试图将这些字符换掉,但这并没有削减它。

$xml = strtr($xml, array('£' => ''));

我在这里无能为力,还是我能做些什么?

2 个答案:

答案 0 :(得分:1)

在HTML页面中显示XML内容之前使用index.jshttp://php.net/manual/en/function.htmlentities.php),同时在该通话中将htmlentities更改为$ch,所以:

$xml

答案 1 :(得分:1)

utf8_encode()会将输入视为latin-1并将其转换为utf-8。如果输入是utf-8,那么这将是一个双重编码 - 这就是你所看到的。

检查您从URL中获取的XML字符串。 XML文件的编码通常在XML处理指令中:

<?xml version="1.0" encoding="utf-8"?>
<document-element/> 

加载到DOM,XMLReader或SimpleXML中,它将始终转换为UTF-8。您使用API​​读取的任何值都将是UTF-8。

如果您想将UTF-8 XML输出到HTML页面的textarea中,则需要转义特殊字符。

echo '<textarea>'.htmlspecialchars($xml).'</textarea>';

这会转义<>等字符,但这是必需的。想象一下包含字符串</textarea>的XML。这会破坏您的HTML页面。在显示之前,浏览器将解码&lt;和其他实体。