我通过PHP cURL检索this XML feed,并将其输出到我页面上的文本区。问题是,它回来的时候充满了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('£' => ''));是我在这里无能为力,还是我能做些什么?
发布于 2015-09-28 21:06:52
在HTML页面中显示XML内容之前使用htmlentities (http://php.net/manual/en/function.htmlentities.php),还要在该调用中将$ch更改为$xml,因此:
echo '<textarea>'.htmlentities($xml).'</textarea>';发布于 2015-09-28 21:36:35
utf8_encode()会将输入视为拉丁-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-8XML输出到HTML页面的文本区,则需要对特殊字符进行转义。
echo '<textarea>'.htmlspecialchars($xml).'</textarea>';这将对<和>等字符进行转义,但这是必需的。想象一下包含字符串</textarea>的XML。这会破坏你的HTML页面。浏览器将在显示<和其他实体之前对它们进行解码。
https://stackoverflow.com/questions/32823417
复制相似问题