PHP5.1.6が動いているサーバとjQueryとの間でJSONでやり取りをさせたときにはまった内容。
まず、PHP5.3とjQueryではPHP内のjson_encodeを利用してJSONデータを作成してブラウザに送り込んで問題なかったのだが、PHP5.1.6+IE+jQueryで問題発生。(FFは問題なし)
json_encodeが利用できるのは、PHP5.2以降か、PHP5.1の場合はPECLで入れたときのみなので、サーバがPHP5.1.6でサーバ内をいじれない環境だったので、以前使ったことのあるServices_JSONでjson_encodeの代わりをさせようとした。
ところが、JSONの受信時にIEではダウンロードのダイアログが出てしまいうまく受け取れない。
Services_JSONが勝手にhttpヘッダーをはいていたことが判明。
詳しくは下記サイト。
http://rd.uniba.jp/blog/2010/03/26/
IEでは正式なContent-type: application/jsonを受け付けてくれないようで。
httpヘッダーをはかないように、encode()メソッドの代わりにencodeUnsafe() を利用することにして一段落。
そしてさらに、IEだとJSONのデータ内の<>'"&などもエスケープしてやる必要がある。(左の5つの内どれだけ変換してやる必要があるかは調べてない。とりあえず5つとも変換してやればうまくいった。)
そこでServices_JSONに少し手を加える。
json_encode($obj, JSON_HEX_TAG|JSON_HEX_APOS|JSON_HEX_QUOT|JSON_HEX_AMP);を実行したときのデータを下にこんな感じのを入れてやる。
case $ord_var_c == 0x3C:
//<
$ascii .= '\u003C';
break;
case $ord_var_c == 0x3E:
//>
$ascii .= '\u003E';
break;
case $ord_var_c == 0x27:
//'
$ascii .= '\u0027';
break;
case $ord_var_c == 0x22:
//"
$ascii .= '\u0022';
break;
case $ord_var_c == 0x26:
//&
$ascii .= '\u0026';
break;
う~んべたべたでぜんぜんスマートじゃない。
がとりあえず動くようになった。
2011年7月6日水曜日
2011年6月12日日曜日
ゴーヤ
我が家のベランダ菜園からサニーレタスがお亡くなりになり、ゴーヤが加入されました。
20Lのプランターで苗1本とはなんとも贅沢です。
グリーンカーテンにするようにはやっているのを耳にして興味を持ったのですが、グリーンカーテンにすると洗濯物が干せなくなるので、邪魔にならない端っこに移動予定。
我が家のベランダ菜園はコストパフォーマンス重視。
収穫目標20本
20Lのプランターで苗1本とはなんとも贅沢です。
グリーンカーテンにするようにはやっているのを耳にして興味を持ったのですが、グリーンカーテンにすると洗濯物が干せなくなるので、邪魔にならない端っこに移動予定。
我が家のベランダ菜園はコストパフォーマンス重視。
収穫目標20本
パスタを打つ
少し前に行った生パスタ屋がちょっと残念だったので、久々に生パスタを打つ。
Ventoとかに気軽に行けたら打たないんだろうけどね。
こねたところ。
気が向けば続きを更新しよう。
レシピはここ(↓)のがいい。
http://www.geocities.co.jp/EpicureanTable/1024/
Ventoとかに気軽に行けたら打たないんだろうけどね。
こねたところ。
気が向けば続きを更新しよう。
レシピはここ(↓)のがいい。
http://www.geocities.co.jp/EpicureanTable/1024/
2011年6月4日土曜日
今年の梅酒&スコーン
今年も梅酒をつける季節がやってきました。
いつものK君に梅をもらって、昨日つけたのがこちらの梅酒。既に氷砂糖が溶けてます。
いっつもありがとうK君。
いつものK君に梅をもらって、昨日つけたのがこちらの梅酒。既に氷砂糖が溶けてます。
いっつもありがとうK君。
次に最近覚えたスコーンをまた焼いたので画像アップ。結構すぐできてうまいです。
2011年3月13日日曜日
CodeIgniter
最近利用するフレームワークは、もっぱらCodeIgniter。
ver2.0になった機会に周辺技術も検討してみようと思う。
DX_AuthをTank Authにして、Modular Extensions - HMVCを入れてみる。
ver2.0になった機会に周辺技術も検討してみようと思う。
DX_AuthをTank Authにして、Modular Extensions - HMVCを入れてみる。
2011年3月10日木曜日
文字列で入れたコードを数字のようにソートしたい
DBのクエリで困った。
次のようなテーブルがある。
code, name
----------
10,AAA
20,BBB
101,CCC
1000,DDD
A100,XXX
codeでソートをかけるんだけど、普通は↓。
SELECT * FROM table_name ORDER BY code;
SELECT * FROM table_name ORDER BY CAST(code AS INTEGER);
エラー
(A100がキャストできない。A100がなければ可能だけどね)
それではこれ↓でどう?
SELECT * FROM table_name ORDER BY LPAD(code, 10, '0');
次のようなテーブルがある。
code, name
----------
10,AAA
20,BBB
101,CCC
1000,DDD
A100,XXX
codeでソートをかけるんだけど、普通は↓。
SELECT * FROM table_name ORDER BY code;
code, name
----------
10,AAA
101,CCC
20,BBB
1000,DDD
A100,XXX
コードを数字として評価してほしい要望がきまして↓。
SELECT * FROM table_name ORDER BY CAST(code AS INTEGER);
エラー
(A100がキャストできない。A100がなければ可能だけどね)
それではこれ↓でどう?
SELECT * FROM table_name ORDER BY LPAD(code, 10, '0');
code, name
----------
10,AAA
20,BBB
101,CCC
1000,DDD
A100,XXX
もっといい方法(ただし簡単にできて)ないかしら。
2011年3月4日金曜日
PostgreSQL84をredhat EL4 に入れてみた
Redhat EL4でPostgreSQL8.4を使う機会があったのでメモ
コミュニティのリポジトリを使う
コミュニティのリポジトリを使うための設定ファイルの入手
> wget http://yum.pgsqlrpms.org/reporpms/8.4/pgdg-redhat-8.4-2.noarch.rpm
そして入れる
> rpm -ivh pgdg-redhat-8.4-2.noarch.rpm
入ったか確認
> ls -l /etc/yum.repos.d/
pgdg-84-redhat.repoが一覧に入っていたらOK
/etc/yum.repos.d/の他のリポジトリからpostgresql関連のものを持ってこさせなくする
/etc/yum.repos.d/の他のリポジトリのファイルのenabled=1のセクションにexclude=postgresql*を追記する
準備オッケー!
PostgreSQL8.4が探せるかチェック
> yum search postgresql
インストールする
postgresql-serverを入れたら必要そうなのは大体入る
> yum install postgresql-server
起動設定
> chkconfig postgresql on
DB初期化
> /etc/init.d/postgresql initdb
必要であれば/var/lib/pgsql/data内の設定ファイルで設定を変える
起動
> /etc/init.d/postgresql start
コミュニティのリポジトリを使う
コミュニティのリポジトリを使うための設定ファイルの入手
> wget http://yum.pgsqlrpms.org/reporpms/8.4/pgdg-redhat-8.4-2.noarch.rpm
そして入れる
> rpm -ivh pgdg-redhat-8.4-2.noarch.rpm
入ったか確認
> ls -l /etc/yum.repos.d/
pgdg-84-redhat.repoが一覧に入っていたらOK
/etc/yum.repos.d/の他のリポジトリからpostgresql関連のものを持ってこさせなくする
/etc/yum.repos.d/の他のリポジトリのファイルのenabled=1のセクションにexclude=postgresql*を追記する
準備オッケー!
PostgreSQL8.4が探せるかチェック
> yum search postgresql
インストールする
postgresql-serverを入れたら必要そうなのは大体入る
> yum install postgresql-server
起動設定
> chkconfig postgresql on
DB初期化
> /etc/init.d/postgresql initdb
必要であれば/var/lib/pgsql/data内の設定ファイルで設定を変える
起動
> /etc/init.d/postgresql start
登録:
コメント (Atom)

