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})/', '', $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 - 这应该可以解决问题。
我用
$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})/', '', $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 - 这应该可以解决问题。