如何正确解析UTF8格式的文件?

时间:2013-08-28 12:32:40

标签: php string parsing encoding utf-8

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

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

2 个答案:

答案 0 :(得分:2)

  

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

可能不会发生这种情况:您的输出页面很可能采用ISO-8859-1等单字节编码进行编码。因此,即使数据完全正常,双字节UTF-8字符也会显示错误。

或者:

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

答案 1 :(得分: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');