うぅーーん。やっぱり無理でした。
スマフォ用のWebサイトを、『どこまで対応端末としてターゲットにするか』
と言う問題はいつでもついてまわるわけですが、
jQuery+jQueryMobile+jQueryUpload &&
FileUpload de iPhone3G with OperaMini
↓
あえなく失敗。。。。^^;^^;
ファイル選択はできてるんですけどねー。。。
アプリにするしかないのか。。。。。
pdfと組版と画像処理とc++とphpとjavascriptとhtml5とcss3とjQueryとjQueriUIとjQueryMobileとRadStudioとAndroidSDK/NDKとWordPressとWelcartを統合するエンジニア的視点。。廃止→as3とflashとflex 追加→柔道
2013年2月28日木曜日
2012年5月29日火曜日
javascriptでJSONをPOSTしてみてPHPで受け取る。
前回のつづきで、javascriptでObjectを生成し、
それをJSON化し、それをPHPでPOSTで受け取るテストをしてみます。
テストとしては、どうやって文字列処理をすればいいのかってことですね。
また、javascriptからPOSTする方法も含めてテストしてみます。
ってことで、こんなコードでテスト
まぁJSONできてるから、JSONをdecodeできる文字列に変更する必要があるわけです。
まず、これはPHPの設定になるわけですが、文字のエンコードを調べます。
echo mb_detect_encoding($param);
ってやってみると、、
UTF-8
となりました。これが「UTF-8以外でいいことなんて、とりあえず何もありませんから、PHPは全てUTF-8前提で考えます。
ってことで、var_dumpでこういう結果↓をえるためには、
そうやったからって言って、速度が速くなるわけでもないので(実験しました)、見やすいように3行にしました。
関数としてはたいしたことない関数。
しかしここで、PHPでencodeすると、こんな文字列になります。
それを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表記になります。まぁ、文字のエンコードの問題があるので、この方が扱いやすいといわれればその通りかもしれません。
ラベル:
html,
javascript,
json,
PHP
2011年2月2日水曜日
PHPでsmartyするとき。
PHPでsmartyするときなんですけどー、、
せっかく、テンプレート化するんだから、うまく分離してつくりたいものです。
ここでいううまく分離というのは、
テンプレートだけをブラウザで表示させても、それらしく見えるように作れれば、
それが一番いいのでは?
という考えです。
まぁちょっと考えればわかることなんですが、とりあえず、あんまり見たことはない。
たぶん、大方の人は、可変部分をテンプレートにいれないからです。
うぅーん、正確な言い方じゃなかった。
テンプレートをhtmlで表示させるときは有効だけど、smartyで使うときは無効になるような
デリミタ設定をしてやればいいのです。
それがこれ。
よって、$maintableをおきかえれば、それでOKってことになりますね。
まぁ逆に、htmlができあがった時点で、可変部分については、デリミタで囲んで、置き換える変数を加えてやれば、それでOK。
昔は、DreamWeaverが8の時代には、拡張子がtplなやつを使えるように、
いろいろ設定したりアイコン作ったりしたけど、、最近はテンプレートの拡張子をhtmlしちゃうとといういい加減さです。^^;^^;
せっかく、テンプレート化するんだから、うまく分離してつくりたいものです。
ここでいううまく分離というのは、
テンプレートだけをブラウザで表示させても、それらしく見えるように作れれば、
それが一番いいのでは?
という考えです。
まぁちょっと考えればわかることなんですが、とりあえず、あんまり見たことはない。
たぶん、大方の人は、可変部分をテンプレートにいれないからです。
うぅーん、正確な言い方じゃなかった。
テンプレートをhtmlで表示させるときは有効だけど、smartyで使うときは無効になるような
デリミタ設定をしてやればいいのです。
それがこれ。
$sm = new Smarty; $sm->left_delimiter = "<!--{"; $sm->right_delimiter = "}-->";そうすると、
<!--{$maintable}--> <!--{* --> <table> <tr><td>1</td><td>2</td></tr> <tr><td>A</td><td>B</td></tr> </table> <!-- *}-->みたいに書けば、html表示したときはtableが表示され、smarty経由だと、tableが表示されなくなる。
よって、$maintableをおきかえれば、それでOKってことになりますね。
まぁ逆に、htmlができあがった時点で、可変部分については、デリミタで囲んで、置き換える変数を加えてやれば、それでOK。
昔は、DreamWeaverが8の時代には、拡張子がtplなやつを使えるように、
いろいろ設定したりアイコン作ったりしたけど、、最近はテンプレートの拡張子をhtmlしちゃうとといういい加減さです。^^;^^;
登録:
投稿 (Atom)