-1

我正在解析一个包含 UTF-8 编码字符的 XML-Feed,如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
<root>
  <value>Ströng</value>
</root>

解析此文件返回格式错误Ströng

$file = file_get_contents($path);
print_r($file);

使用$xml = simplexml_load_file($path);产生相同的结果。

现在我尝试使用该utf8_encode()函数来纠正这样的字符编码:

$file = utf8_encode(file_get_contents($path));
print_r($file);

但是现在内容变得更糟了:Ströng. 这是为什么?

如何正确解析 UTF8 格式的 XML?


更新:

mb_detect_encoding($file)返回:UTF-8utf8_decode()返回Str?ng

到目前为止,一切似乎都是正确的,但事实并非如此?

4

2 回答 2

2

解析这个文件会返回一个格式错误的字符串:

这可能不是发生的情况:您的输出页面很可能以单字节编码(如 ISO-8859-1)进行编码。因此,即使数据非常好,两字节 UTF-8 字符也会显示错误。

任何一个:

  • utf8_decode()结果(如果您实际上使用 ISO-8859-1 进行输出)
  • 用于iconv()转换结果(如果您使用的是 ISO-8859-1 以外的单字节编码)
  • ...或将您的输出编码更改为 UTF-8(最好,因为它是最通用的解决方案。)
于 2013-08-28T12:35:38.887 回答
1

您是否在文档中将字符集设置为 UTF-8(print_r 输出的位置)?您可以通过添加:

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

到该<head>部分。

或者在 PHP 中添加一个header('Content-Type: text/html; charset=utf-8');

于 2013-08-28T12:39:32.903 回答