3

JSON API プラグインを使用して友人の最近の投稿の JSON フィードを取得する、友人のワードプレス サイト用の API を作成しました。何ヶ月も問題なく動作していましたが、数日前、彼女の共有ホストが PHP 5.3 に切り替えられたとき、完全に動作しなくなりました (もちろん、彼らはユーザーに警告しませんでした.なぜ警告する必要があるのでしょうか?)

調べてみると、JSON 文字列を受け取り、デコードされた JSON オブジェクトを別の関数に返すコードの部分に奇妙なエラーが見つかりました。以前は、コード (動作したことを誓います!) は次のように動作していました。

    $json_string = file_get_contents($url_to_json_string);
    return json_decode($json_string);

これにより NULL が返されるようになり、json_last_error が 4 (構文エラー) になりました。utf8_encoding: を確認しました。BOM の奇妙さをチェックしました (この投稿によると): 結構です。jsonlint.comjson.parser.online.frで JSON 文字列を検証したところ、完全に有効でした。迷子の htmlentities も、さまようスラッシュもありません。JSON 文字列自体は問題なく、検証されているはずです。

次に、コードを次のように変更しました。

    $json_string = file_get_contents($url_to_json_string);
    $json_object = json_decode($json_string);
    return $json_object;

そしてそれはうまくいきました。

なぜこれが起こったのか誰か知っていますか?

4

3 に答える 3

4

印刷できない文字は JSON 文字列にする必要があります。以下を使用します。

json_decode( preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $json_string);, true );
于 2012-07-16T06:42:33.837 に答える
3

次のリンクが該当する場合があります。

PS:

私はあなたのスニペットをいくつかのバリデーターに通しました: 私は何も間違っていませんでした ... しかし、あなたは:

于 2012-06-29T19:31:40.720 に答える
0

jsonDecode には一般的なバグがあり、"id":"google:11111111111111111111111111111111111" が "id:"google:"1111111111111111111111111"" に変換され、構文エラーが発生します。

それを修正するには、次の行にする必要があります: $json_without_bigints = preg_replace('/:\s*(-?\d{'.$max_int_length.',})/', ': "$1"', $input);

(前の正規表現では : でなければなりません)。

于 2015-10-29T08:59:54.173 に答える