微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用PHP解码Microsoft转换器API的JSON输出

这个问题似乎特定于microsofttranslator.com所以请…任何答案,如果你可以测试它…

使用以下URL进行翻译:http://api.microsofttranslator.com/V2/Ajax.svc/TranslateArray ..我通过cURL发送了一些很棒的参数,并得到以下结果:

[
      {
           "From":"en","OriginalTextSentenceLengths":[13],"TranslatedText":"我是最好的","TranslatedTextSentenceLengths":[5]
      },{
           "From":"en","OriginalTextSentenceLengths":[16],"TranslatedText":"你是最好的","TranslatedTextSentenceLengths":[5]
      }
 ]

当我使用json_decode($output,true);在cURL的输出上,json_decode在返回的JSON中给出了一个不合适的语法错误

json_last_error() == JSON_ERROR_Syntax

使用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","TranslatedTextSentenceLengths":[5]},{"From":"en","TranslatedTextSentenceLengths":[5]}]

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返回错误的字节顺序标记(BOM).
字符串数据本身是UTF-8,但前缀为U FEFF,这是一个UTF-16 BOM.只需删除前两个字节和json_decode.

...
$output = curl_exec($ch);
// Insert some sanity checks here... then,$output = substr($output,3);
...
$decoded = json_decode($output,true);

这是我的测试代码的全部内容.

$texts = array("i am the best" => 0,"you are the best" => 0);
$ch = curl_init(); 
curl_setopt($ch,1);
$data = array(
    'appId' => $bing_appId,'texts' => json_encode(array_keys($texts))
    );
curl_setopt($ch,$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
                )

        )

)

Wikipedia entry on BOM

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐