"\n" と "'" をエスケープ処理したら。改行のあるデータも JSON が使えた。
PHPでJSONを組み立てるときにエスケープ処理をし、クライアントのJavaScript で eval() でオブジェクトを作った後、データをアンエスケープする。おおむね次のような処理になる。 PHP側 function replace($str) { $str = str_replace("\n", "\\n", $str); $str = str_replace("'", "\'", $str); return $str; } $hash = データのハッシュ $js = '{'; foreach ($hash as $key => $value) { $js = $js.$key.":'".replace($value)."',"; //replace が文字列のエスケープ処理 }; $js = $js."'}"; echo $js; JavaScript側 function getAjaxResponse(url) { var sendObj = makeSendObject(); var param = $H(sendObj).toQueryString(); var myAjax = new Ajax.Request( url, {method : 'post', parameters : param, onComplete : decodeJson }); } function decodeJson(obj) { json = obj.responseText; json_obj = eval("("+json+")"); $H(json_obj).each(function(pair, index) { $(pair.key).value //アンエスケープ処理は eval() が実行されるときに自動的に行われるようなので、JavaScript側では不要になる。 }); } Ajaxのデータのエスケープ処理の経路は次のようになっているのだろうか。 クライアントー>オブジェクトー>URLエンコーディングー>サーバーー>URLデコーディングー>データベースのためのエスケープ処理ー>データベースー>データベース出力のアンエスケープー>PHPでJSONのためのエスケープ処理ー>URLエンコーディングー>クライアントー>URLデコーディングー>JSONデータのパースー>JSONデータのアンエスケープ処理 実際はたくさんの文字列処理が行われているが、Ajax でデータ通信するためのユーザのプログラムは、上に述べたような2文字のエスケープとアンエスケープ処理だけで済むようだ。しかしエスケープに次ぐエスケープになるので思いもかけない副作用があるかもしれない。Ajaxによるデータの受け渡しには要注意だ。
by tnomura9
| 2007-10-31 12:56
| XAMPP
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||