0

我正在通过 PHP cURL 检索此 XML 提要并将其输出到我页面上的文本区域中。问题是,它回来时充满了 mojibake 角色。饲料本身很好;只有在我的页面上输出时才会出现字符。

例如,英镑符号 (£) 以 £ 的形式返回。

正如对这个问题的回答所建议的那样,我已经尝试在这个问题上抛出 UTF-8 。

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" />

甚至通过输出 cURL 响应utf8_encode(),但它们仍然存在。

$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('£' => ''));

我在这里无能为力,还是有什么我可以做的?

4

2 回答 2

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 页面的文本区域,您需要转义特殊字符。

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

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

于 2015-09-28T13:36:34.657 回答
1

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

echo '<textarea>'.htmlentities($xml).'</textarea>';
于 2015-09-28T13:06:52.460 回答