2008-09-24 5 views
2
$a = '{ "tag": "<b></b>" }'; 
    echo json_encode(json_decode($a)); 

この出力は:json_encodeとjson_decodeを使ってこのPHPコードを説明できる人はいますか?

{"tag":"<b><\/b>"} 

あなたはそれが出力を正確に入力と思うだろう。なんらかの理由で、json_encodeは余分なスラッシュを追加します。

+1

についてのあなたの知識を向上させるために、この記事を読むことができます文字列が正しい。 –

答えて

18

それはおそらくセキュリティ機能ですJSON標準

http://json.org/

文字

any-Unicode-character- 
    except-"-or-\-or- 
    control-character 
\" 
\\ 
\/ <---- see here? 
\b 
\f 
\n 
\r 
\t 
\u four-hex-digits 
2

の一部だからです。エスケープされたバージョン(例:出力)は、エスケープされていないバージョンと同様に、JavaScript(例:\//になります)によって解析されます。そのようなスラッシュをエスケープすると、ブラウザがJavascript文字列をHTMLとして誤って解釈する可能性が低くなります。もちろん、データを正確に扱うならば、これは必要ではないはずです。だから、無知なプログラマーが自分自身のために物事を混乱させないようにするのはより安全です。

2

あなたの入力は有効ではありませんが、PHPのJSONパーサー(ほとんどのJSONパーサーのように)はとにかく解析します。

+0

何が無効ですか? –

+0

私はあなたの文字列の外に余分な空白がそこにあるべきではないと思います。 – bot403

3

使用この:

echo json_encode($a,JSON_HEX_TAG) 

結果は次のようになります。

["\u003C\u003E"] 

あなたはあなたが本当にあなたのJSONことを想定することはできませんJSON_ENCODE http://php.net/manual/en/function.json-encode.php

関連する問題