Guzzle、JSON 和 UTF-16
Guzzle, JSON and UTF-16
我们正在使用 Guzzle 6 从我们的 Laravel 5 应用程序向 .NET API 发出请求。
例如(不是真正的代码)
$response = Guzzle\Client->get('/utf16-endpoint');
$array = json_decode($response->getBody());
这会变成 $array = null
并再次出现任何其他变体,例如
$array = json_decode((string) $response->getBody());
或
$array = json_decode($response->getBody()->getContent());
这些最终都返回null
我无法粘贴 API 回复,因为它不断被 Gists、Pastebin 等东西转换,所以我上传了一个 .txt 文件 http://consolewatch.io/response.txt 的回复,如果你打开sublime/atom 等 - 它应该显示为 "UTF-16 LE"
从 guzzle 获取此响应并确保将 JSON 转换为其中包含对象的数组的正确方法是什么(我们正在使用 PHP7)?
您可以从文档中注意到,json_decode() works only with UTF-8 in PHP。
因此,您只需将响应转换为 UTF-8 即可:
$content = $response->getBody()->getContent();
$data = json_decode(
mb_convert_encoding($content, 'UTF-8', 'UTF-16LE')
);
我们正在使用 Guzzle 6 从我们的 Laravel 5 应用程序向 .NET API 发出请求。
例如(不是真正的代码)
$response = Guzzle\Client->get('/utf16-endpoint');
$array = json_decode($response->getBody());
这会变成 $array = null
并再次出现任何其他变体,例如
$array = json_decode((string) $response->getBody());
或
$array = json_decode($response->getBody()->getContent());
这些最终都返回null
我无法粘贴 API 回复,因为它不断被 Gists、Pastebin 等东西转换,所以我上传了一个 .txt 文件 http://consolewatch.io/response.txt 的回复,如果你打开sublime/atom 等 - 它应该显示为 "UTF-16 LE"
从 guzzle 获取此响应并确保将 JSON 转换为其中包含对象的数组的正确方法是什么(我们正在使用 PHP7)?
您可以从文档中注意到,json_decode() works only with UTF-8 in PHP。
因此,您只需将响应转换为 UTF-8 即可:
$content = $response->getBody()->getContent();
$data = json_decode(
mb_convert_encoding($content, 'UTF-8', 'UTF-16LE')
);