json_decode & file_get_contents 没有得到 UTF8 字符

json_decode & file_get_contents doesn't get the UTF8 characters

我用

$link = json_decode(file_get_contents("http://graph.facebook.com/111866602162732"));

该页面上的结果显示:

 "name": "L\u00e9ry, Quebec",

然后我想用重音符转换它.. 像这样:

$location_name = $link->name;
echo 'NAME ORIGINAL: '.$location_name;
$location_name = preg_replace('/\\u([0-9a-fA-F]{4})/', '&#x;', $location_name); // convert to UTF8
echo '  NAME after: '.$location_name;

我得到以下结果:

  NAME ORIGINAL: Léry, Quebec     NAME after: Léry, Quebec

我的preg_replace是正确的,所以它是被file_get_contents转换的原始名称。

如果 file_get_contents 不返回格式正确的 UTF-8 文本,那么 json_decode 您将 return NULL。 Json 必须采用 UTF-8 编码。

This function only works with UTF-8 encoded strings. (json_decode)

所以,我猜您正在使用另一种编码读取数据。看看吧。

很可能,您将 json_decode 提供给您的有效 UTF-8 输出视为 ISO-8859-1 参见此处,例如:http://www.i18nqa.com/debug/bug-utf-8-latin1.html

确保您将调试输出视为 UTF-8 - 这应该可以解决问题。