我正在通过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('£' => ''));
我在这里无能为力,还是我能做些什么?
答案 0 :(得分:1)
在HTML页面中显示XML内容之前使用index.js
(http://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页面。在显示之前,浏览器将解码<
和其他实体。