「ほっ」と。キャンペーン

Json で改行が使えた。

"\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によるデータの受け渡しには要注意だ。
[PR]
by tnomura9 | 2007-10-31 12:56 | XAMPP | Comments(0)
<< 意外と簡単 Ajax Ajax とエスケープの悩ましい関係 >>