【问题标题】:How to parse a file in UTF8 format correctly?如何正确解析 UTF8 格式的文件?
【发布时间】:2013-08-28 12:32:39
【问题描述】:

我正在解析一个包含 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

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

【问题讨论】:

标签: php string parsing encoding utf-8


【解决方案1】:

解析此文件并返回格式错误的字符串:

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

要么:

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

【讨论】:

    【解决方案2】:

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

    &lt;meta http-equiv="Content-type" content="text/html;charset=UTF-8" /&gt;

    &lt;head&gt; 部分。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-15
      • 2018-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      相关资源
      最近更新 更多