エンコード関係のまとめを一度しなきゃいけないと思ってたので、
ちょっとまとめます。
もちろん、ASとJSは、基本的にはECMAスクリプトですが、
使うライブラリの問題もしれないので、分けます。
(1)C++ → 自前処理
(2)php → json_decode/json_encode関数
(3)ActionScript → com.adobe.serialization.json.JSONにおける、encode,decode
(4)javascript → JSON.stringify/JSON.parse関数(evalは使わない)
ということで、C++の場合は、自分でやってるので、特に言及しません。
問題になりそうなのは、主に、記号類。
その中でも、
【/】【\】【'】【"】【改行】
が重要だと思うので、これらをそれぞれで入力したとき、JSONに変換したとき、POSTで受け取るときなどをまとめてみます。
●テスト1
javascriptでオブジェクトを生成して、それをJSON文字列化。
問題になりそうなのは、主に、記号類。
その中でも、
【/】【\】【'】【"】【改行】
が重要だと思うので、これらをそれぞれで入力したとき、JSONに変換したとき、POSTで受け取るときなどをまとめてみます。
●テスト1
javascriptでオブジェクトを生成して、それをJSON文字列化。
- <h1>01.html</h1>
- <script type="text/java script">
- var s = "【\u0027】"; // '
- s += "【\u0022】"; // "
- s += "【\u005c】"; // \
- s += "【\u002f】"; // /
- s += "【\u000d】"; // 0d \r
- s += "【\u000a】"; // 0a \n
- s += "【\u0009】"; // tab
- alert(s);
- var OJ = function() {};
- var o = new OJ();
- o.dat1 = s;
- var ss = JSON.stringify(o);
- alert(ss);
- var sss = "";
- for(var w=0;w<ss.length;w++){
- var v = ss.charCodeAt(w);
- if(v != 12304 && v != 12305) sss += "-" + v.toString(16);
- }
- alert(sss);
- </script>
で、最後の16進コードをもとに見てみると、
【’】【¥”】【¥¥】【/】【¥r】【¥n】【¥t】
である。(全角表示)
ようするに、【’】と【/】は、escapeされない。まぁそういぅ仕様だわね。。
まぁ、あたりまえの事を、一応やってみて確認することが重要なのです。
なんで、16進コードなんかで見るかっていうと、
こんな簡単なコードでも、ブラウザによってalertの表示が違うんですよね。TABとか¥rとかね。 こんな簡単な例だと間違えないけど、javascriptを動的に文字列で作り出したりしてるときに気を抜いていると、思わぬことになるのです。
0 件のコメント:
コメントを投稿