我正在解析包含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-8
而utf8_decode()
返回Str?ng
。
到目前为止,一切似乎都是正确的,但事实并非如此?
答案 0 :(得分:2)
解析此文件会返回格式错误的Ströng:
可能不会发生这种情况:您的输出页面很可能采用ISO-8859-1等单字节编码进行编码。因此,即使数据完全正常,双字节UTF-8字符也会显示错误。
或者:
utf8_decode()
结果(如果您实际上是使用ISO-8859-1进行输出)iconv()
转换结果(如果您使用的是ISO-8859-1以外的单字节编码)答案 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');