2012年5月29日火曜日

javascriptでJSONをPOSTしてみてPHPで受け取る。

前回のつづきで、javascriptでObjectを生成し、
それをJSON化し、それをPHPでPOSTで受け取るテストをしてみます。
テストとしては、どうやって文字列処理をすればいいのかってことですね。
また、javascriptからPOSTする方法も含めてテストしてみます。

ってことで、こんなコードでテスト


php
$a = Var_Dump::display($_POST,true);
echo $a;
で、結果は、、
------------------POST------------------
array(1) {
  param => string(77) {\"dat1\":\"【\'】【\\\"】【\\\\】【/】【\\r】【\\n】【\\t】\"}
}

ってことは、、、
{"dat1":【'】【\"】【\\】【/】【\r】【\n】【\t】}
が
{\"dat1\":\"【\'】【\\\"】【\\\\】【/】【\\r】【\\n】【\\t】\"}
になってるってことです。
じゃぁこれをどうやって取り込むかってことですね。
まぁJSONできてるから、JSONをdecodeできる文字列に変更する必要があるわけです。
まず、これはPHPの設定になるわけですが、文字のエンコードを調べます。
echo mb_detect_encoding($param);
ってやってみると、、
UTF-8
となりました。これが「UTF-8以外でいいことなんて、とりあえず何もありませんから、PHPは全てUTF-8前提で考えます。
ってことで、var_dumpでこういう結果↓をえるためには、
array(1) {
  dat1 => string(52) ◆【'】【"】【\】【/】【
】【
                     】【 】
}
PHP側で、こういう↓文字列処理をすればいいことになります。
$param = $_POST['param'];
$param = preg_replace("/\x5c\x5c\x22/",  "\x22",$param);  //【\"】 を 【"】 にする
$param = preg_replace("/\x5c\x5c\x27/",  "\x27",$param);  //【\'】 を 【'】 にする
$param = preg_replace("/\x5c\x5c\x5c\x5c/", "\x5c\x5c",$param); //【\\】 を 【\】 にする
もちろん、preg_replaceなので配列にして渡してもいいんですが、、、
そうやったからって言って、速度が速くなるわけでもないので(実験しました)、見やすいように3行にしました。

関数としてはたいしたことない関数。
 function objectFromJsJson($v){
  $vv = preg_replace("/\x5c\x5c\x22/",  "\x22",$v);  // 【\"】 を 【"】 にする
  $vv = preg_replace("/\x5c\x5c\x27/",  "\x27",$vv);  // 【\'】 を 【'】 にする
  $vv = preg_replace("/\x5c\x5c\x5c\x5c/", "\x5c\x5c",$vv); // 【\\】 を 【\】 にする
  $json = json_decode($vv,true);
  return $json;
 }

しかしここで、PHPでencodeすると、こんな文字列になります。
//【コード】
 $str = json_encode($json);
 echo $str;
//【結果】
{"dat1":"\u25c6\u3042\u3010'\u3011\u3010\"\u3011\u3010\\\u3011\u3010\/\u3011\u3010\r\u3011\u3010\n\u3011\u3010\t\u3011"}
日本語が\u表記になります。まぁ、文字のエンコードの問題があるので、この方が扱いやすいといわれればその通りかもしれません。

0 件のコメント:

コメントを投稿