首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过cURL检索XML中的Mojibake问题

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

Stack Overflow用户
提问于 2015-09-28 20:48:46
回答 2查看 127关注 0票数 0

我通过PHP cURL检索this XML feed,并将其输出到我页面上的文本区。问题是,它回来的时候充满了mojibake角色。提要本身没有问题;只有当输出到我的页面上时,字符才会出现。

例如,井号(Â)返回为Â。

我尝试使用UTF-8来解决这个问题,就像this question的答案中所建议的那样。

代码语言:javascript
复制
ini_set('default_charset', 'UTF-8');
header("Content-Type:text/html; charset=UTF-8");

在HTML中:

代码语言:javascript
复制
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

即使通过utf8_encode()输出cURL响应,它们仍然存在。

代码语言:javascript
复制
$ch = curl_init($feed_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$xml = curl_exec($ch);
echo '<textarea>'.utf8_encode($xml).'</textarea>';

我甚至试着把这些字符换掉,但还是不行。

代码语言:javascript
复制
$xml = strtr($xml, array('£' => ''));

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

EN

回答 2

Stack Overflow用户

发布于 2015-09-28 21:06:52

在HTML页面中显示XML内容之前使用htmlentities (http://php.net/manual/en/function.htmlentities.php),还要在该调用中将$ch更改为$xml,因此:

代码语言:javascript
复制
echo '<textarea>'.htmlentities($xml).'</textarea>';
票数 1
EN

Stack Overflow用户

发布于 2015-09-28 21:36:35

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

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

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<document-element/> 

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

如果希望将UTF-8XML输出到HTML页面的文本区,则需要对特殊字符进行转义。

代码语言:javascript
复制
echo '<textarea>'.htmlspecialchars($xml).'</textarea>';

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32823417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档