2011-06-28 8 views
6

私は他のサイトへの応答を生成するために、JSON APIプラグイン(http://wordpress.org/extend/plugins/json-api/)と一緒にWordPressを使用しています。json_encodeを使用した奇妙なJSONエンコーディング

私は本当に奇妙な問題(我々はPHP 5.3.6を使用している)私は、次の配列を渡すとき、http://pastebin.com/xdfYjrvKはそれが私にこの(JSONコンテンツタイプを持つ)を与える)(json_encodeするヒットしました:http://pastebin.com/T61XGPP5

だから、上記の例では、最後の2609と0は、レスポンスのサイズに応じて変化します。より多くのコンテンツ - >より高い16進数です。また、応答の量が「十分に高い」場合にのみ表示されるため、小さな応答でも機能します。

私はそれがプラグインだと思っていましたが、ローカルで(Mac OS Xの2つの異なるマシンで)動作し、VPS(Debian、Apache、Nginx、PHP)のすべてのパッケージを最新バージョンに更新しました。

代わりに、アプリケーション/ JSONのプレーンテキストで$結果を出力する際に​​、コンテンツタイプのない送信する場合にのみ表示されます:

$charset = get_option('blog_charset'); 
if (!headers_sent()) { 
    header('HTTP/1.1 200 OK', true); 
    header("Content-Type: application/json; charset=$charset", true); 
} 

echo $result; 

$文字セットがUTF-8に設定されています。

Google Chromeのコンソールには、「リソースはドキュメントとして解釈されますが、MIMEタイプapplication/jsonで転送されます」と表示されます。

だから、誰かがここで何が起こっているのか分かりませんか?

+0

$ resultはどこに初期化されていますか?それはjson_encode-dの値ですか? –

+0

はい、それはを内蔵したjson_encodingの世話を別の関数から来 –

答えて

4

を推測するよう

エルス

...それは、奇妙に見えます。 WebサーバーがCTEを使用しないようにヘッダーがContent-Lengthを適切に設定していることを確認してください。

+0

私のヘッダがあっエンコードです:。 HTTP/1.1 200 OK サーバー:nginxの/ 0.6.32 日: Wed、29 Jun 2011 06:25:53 GMT コンテンツタイプ:application/json; charset = UTF-8 転送エンコーディング:チャンク 接続:キープアライブ X-Powered-By:PHP/5.2.6-1 + lenny10 魅力的なコンテンツ長の設定は、ありがとう! –

+0

も同様にnginxと同じ問題を抱えていた..これは私に多くのトラブルをたくさん保存してくれてありがとう – skiplecariboo

0

つの要件のJSONは持っているあなたがそれに与えるすべてのデータは UTF-8でエンコードされている必要がありということです。 json_encode()はこれを自動的に行いません。したがって、json_encodeを実行する前に、array_map("utf8_encode", $array);を実行してみてください。イムは、ちょうどこれは、チャンクエンコーディング(http://en.wikipedia.org/wiki/Chunked_transfer_encoding)のように見える...

+0

すべてのデータがすでにUTF-8 –

関連する問題