使用PHP解码Microsoft翻译API的JSON输出 [英] decoding the JSON output from Microsoft translator API with PHP
问题描述
这个问题似乎特定于microsofttranslator.com ,所以请...任何答案,如果你可以测试它...
this issue seems specific to microsofttranslator.com so please ... any answers, if you can test against it ...
使用以下网址进行翻译: http://api.microsofttranslator.com/V2/Ajax。 svc / TranslateArray ..我通过cURL发送一些梦幻般的参数,并得到以下结果:
Using the following URL for translation: http://api.microsofttranslator.com/V2/Ajax.svc/TranslateArray .. I send via cURL some fantastic arguments, and get back the following result:
[
{
"From":"en",
"OriginalTextSentenceLengths":[13],
"TranslatedText":"我是最好的",
"TranslatedTextSentenceLengths":[5]
},
{
"From":"en",
"OriginalTextSentenceLengths":[16],
"TranslatedText":"你是最好的",
"TranslatedTextSentenceLengths":[5]
}
]
b $ b
当在cURL的输出中使用 json_decode($ output,true);
时,json_decode给出了一个关于语法不适合的错误, strong> JSON ::
When I use json_decode($output, true);
on the output from cURL, json_decode gives an error about the syntax not being appropriate in the returned JSON:
json_last_error() == JSON_ERROR_SYNTAX
使用JSON返回的标头:
The headers being returned with the JSON:
响应标头
Response Headers
Cache-Control:no-cache
Content-Length:244
Content-Type:application/x-javascript; charset=utf-8
Date:Sat, 06 Aug 2011 13:35:08 GMT
Expires:-1
Pragma:no-cache
X-MS-Trans-Info:s=63644
原始内容:
Raw content:
[{"From":"en","OriginalTextSentenceLengths":[13],"TranslatedText":"我是最好的","TranslatedTextSentenceLengths":[5]},{"From":"en","OriginalTextSentenceLengths":[16],"TranslatedText":"你是最好的","TranslatedTextSentenceLengths":[5]}]
cURL代码:
cURL code:
$texts = array("i am the best" => 0, "you are the best" => 0);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = array(
'appId' => $bing_appId,
'from' => 'en',
'to' => 'zh-CHS',
'texts' => json_encode(array_keys($texts))
);
curl_setopt($ch, CURLOPT_URL, $bingArrayUrl . '?' . http_build_query($data));
$output = curl_exec($ch);
推荐答案
API返回错误的字节顺序标记)。
字符串数据本身是UTF-8,但前面加上 U + FEFF
,这是一个UTF-16 BOM。只需删除前两个字节和 json_decode
。
The API is returning a wrong byte order mark (BOM).
The string data itself is UTF-8 but is prepended with U+FEFF
which is a UTF-16 BOM. Just strip out the first two bytes and json_decode
.
...
$output = curl_exec($ch);
// Insert some sanity checks here... then,
$output = substr($output, 3);
...
$decoded = json_decode($output, true);
这是我的测试代码的全部。
Here's the entirety of my test code.
$texts = array("i am the best" => 0, "you are the best" => 0);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = array(
'appId' => $bing_appId,
'from' => 'en',
'to' => 'zh-CHS',
'texts' => json_encode(array_keys($texts))
);
curl_setopt($ch, CURLOPT_URL, $bingArrayUrl . '?' . http_build_query($data));
$output = curl_exec($ch);
$output = substr($output, 3);
print_r(json_decode($output, true));
这给了我
Array
(
[0] => Array
(
[From] => en
[OriginalTextSentenceLengths] => Array
(
[0] => 13
)
[TranslatedText] => 我是最好的
[TranslatedTextSentenceLengths] => Array
(
[0] => 5
)
)
[1] => Array
(
[From] => en
[OriginalTextSentenceLengths] => Array
(
[0] => 16
)
[TranslatedText] => 你是最好的
[TranslatedTextSentenceLengths] => Array
(
[0] => 5
)
)
)
这篇关于使用PHP解码Microsoft翻译API的JSON输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!