Ajaxで今よみがえる(^^;;-->[クロスブラウザ技術 ]DHTMLサンプル集
古籏一浩さんとのはじめての共著 発売中-->『Ajax実践テクニック』 古籏一浩/高橋 登史朗 (著)秀和システム
配本予約開始-->『入門Ajax 増補改訂版 』 高橋 登史朗 (著)ソフトバンククリエイティブ ; ISBN: 4797336242
-- リスト --
【カテゴリー】 ActionScript ( 5 ) AIR ( 2 ) AjaSQL ( 10 ) Ajax ( 561 ) Arax ( 1 ) canvas ( 10 ) CSS ( 10 ) ( 5 ) DLNA ( 1 ) Dojo ( 17 ) DOM ( 45 ) ES4 ( 4 ) 反重力物質 ( 1 ) ffAdd-on ( 1 ) Flash ( 46 ) Flash Remoting ( 11 ) FTP ( 2 ) GAF ( 9 ) Google Maps ( 112 ) GPS ( 41 ) HTTPヘッダサンプル ( 9 ) Internet ( 1 ) IPv6 ( 1 ) 漫画 ( 1 ) Java ( 44 ) JavaScript ( 248 ) jKamo ( 8 ) jQchart ( 1 ) jQuery ( 106 ) jquery-ref ( 1 ) jsGadget ( 19 ) jslb_ ( 3 ) jslb_ajax ( 9 ) JSON ( 46 ) JSR223 ( 7 ) kjscmd ( 1 ) KNOPPIX ( 1 ) Linux ( 15 ) Mac ( 8 ) Memo ( 3 ) Microformats ( 2 ) Mini AJAX ( 2 ) MochiKit ( 2 ) mootools ( 3 ) Movable Type ( 57 ) MySQL ( 10 ) NewGameWeb ( 2 ) Nucleus ( 8 ) OpenAJAX ( 3 ) OpenDocument ( 1 ) OS ( 7 ) P2P ( 2 ) Perl ( 7 ) PHP ( 37 ) PostGIS ( 1 ) PostgreSQL ( 4 ) prototype.js ( 21 ) ROBOT ( 1 ) RSSリーダー ( 14 ) Ruby on Rails ( 7 ) Spry ( 6 ) SQLite ( 11 ) SQLiteWorker ( 2 ) ssh ( 1 ) SSI ( 2 ) SVG ( 15 ) TRON ( 1 ) Video ( 1 ) VML ( 1 ) Webサービス ( 96 ) widget ( 6 ) Wii ( 1 ) Wiki ( 1 ) Win ( 6 ) WSH ( 1 ) X01HT ( 29 ) XML ( 30 ) XOOPS ( 1 ) XQuery ( 2 ) XUL ( 4 ) Yahoo! UI ( 62 ) 日付入力用カレンダー ( 1 ) 『Ajax実践テクニック』 ( 1 ) 『入門 Ajax』 ( 42 ) WinTips ( 2 ) こりゃすごい ( 3 ) チューニング ( 21 ) ダイナミックロード関数 ( 7 ) リファレンス ( 13 ) ライブラリ ( 107 ) レーダー雨量表示 ( 1 ) ハード ( 20 ) ペンギン ( 2 ) ブラウザ ( 71 ) ブログでBBS ( 1 ) アクセスグラフ ( 3 ) イベント ( 1 ) カレンダーによる日付入力スクリプト ( 4 ) クロスブラウザ ( 11 ) クロスブラウザ関数 ( 7 ) スマートフォン ( 8 ) セキュリティ ( 106 ) ソフトイーサ ( 1 ) マッシュアップ ( 23 ) 暗号 ( 4 ) 映画 ( 47 ) 河川の水位グラフ ( 3 ) 回線 ( 2 ) 開発ツール ( 22 ) 牛久大仏 ( 8 ) 携帯 ( 118 ) 言語 ( 18 ) 故障 ( 2 ) 洪水警報システム ( 2 ) 今日のひと言 ( 5 ) 仕様 ( 55 ) 雑談 ( 219 ) 実装 ( 1 ) 書籍 ( 17 ) 親子ウインドウ有無の確認関数 ( 3 ) 新海誠 ( 3 )
【info】有料サポート(ベータ)限定 承り中 多忙につき、一時、新規受付停止 閉店中 /【JSサポート(仮称)】 

【費用】 とりあえず、言い値で承ります。ただし、できる範囲での限定受付です。込み具合等によりお受けできない場合がありますのであらかじめご了承ください。サポートにご納得いただけなければ料金は不要です。 逆に感動したら多くても構いません(^^;;;。

【できること】 たとえば、かも日記で無料配布されているコードのカスタマイズや、あるいは、JavaScript/Ajax全般+Webサーバーとの連携などのアドバイス&サンプル作成等 。A:jQchartなどでWeb用グラフ設置(エクセル→CSVやデータベースからWebグラフ生成)などのアドバイスやカスタマイズサンプル作成。B:ツリーメニューなどのカスタマイズサンプル。C:Google Mapsのカスタマイズ。etc...

【できないこと】 腕立て伏せ200回

【ライセンス】 私が今まで「かも日記」等で提供してきたコードの大半は、商用利用、改造、自由、連絡不要で、今後もそれらは変わりません。そして、この有料サポートによりカスタマイズコードなどが提供される場合でも、同様に、それらを商用利用しても改造しても自由です。ただし、制限のきついライブラリなどを使う場合は、各ライブラリのライセンスに準拠せざるを得ない場合があります。

【info】いつもいろいろなテストなどをページ内のあちこちでやっているので、重かったり、壊れていたりするf^^;ことも多いですが、何卒、ご了承ください ( _ _ b

2005年05月22日

【Ajax】日本語文字列防忘メモ

Ajax ブックマークに追加する ブックマーク-- Buzzurl  / Hatena  / Livedoor track feed


Ajaxでサーバーとやりとりする時の日本語文字列扱いについて、 防忘録のための整理。不得意分野なので、つっこみ大歓迎。

1:サーバー上の日本語をブラウザで表示するだけの場合
ajax1.gif
 サーバーから一方的にPCが日本語をAjaxで受け取るケースです。

 このケースでは、むき出しの日本語を、サーバーからPCへ送るとSafari, Konquerorで文字化けします(参考:responseされる文字コードの調査)。

 そこで、この、Safari, Konqueror対策として、今のところ、私の場合は、あらかじめ、PCのJavaScriptでencodeURI() などした文字列をサーバー側に置き、受信した文字列をdecodeURI()などしてみてい ます( 例 : Allabout /Ajaxはじめの一歩 XMLHttpRequest) 。

 あらかじめ用意する理由は、PHPやJavaのURLエンコードとJavaScriptのURL エンコードが微妙に違うためです。つまり、JavaScriptのURLエンコード方式だけでやりと りすることでデコード間違いのリスクを減らすというわけです。

 JavaScriptのURLエンコード方式には 「escpe()/unescape()」「encodeURI()/decodeURI()」「encodeURIComponent()/decodeURIComponent()」 の3方式(6つのメソッド)がありますが、escpe/unescapeはブラウザ毎に実装が異なりますからあまりお勧めしません。encodeURIやencodeURIComponentなどは、ともにutf-8としてエンコード しますが、前者が、予約語(,や:や?など)をエンコードしないという違いだけですので、 必要に応じて使えば良いと思います。( ECMA-262 3rd Edition 和訳 : 15.1.3 URI 処理関数のプロパティ )

 ちなみに、この4つのメソッド(encodeURI、decodeURI、encodeURIComponent、decodeURIComponent)はECMAScriptに準拠したもので、UTF-8を使って "%xx" のように変換します(xx は16進数)。

 もちろん、もし、サーバー側でJavaScriptのエンコードをエミュレートできるなら、それを使えばOK だと思います。


2:単体のPCとサーバーで送受信する場合
ajax2.gif
 PCから日本語をサーバーへ送り、その後それを逆にPCがサーバーから受け取る というケースです。つまり、PCが最初に日本語を発信をします。

 PCからサーバーへのデータ入力時などにありうるケースでしょう。

 この場合は、PCとサーバー間のエンコーディングが同じなら良いわけですから 「escpe()」「encodeURI()」「encodeURIComponent()」どれでも構わなさそうです が、たとえば、Safariでは、どれでも、化けてしまいます。

 調べてみたら、send()でサーバーまでは化けずに届いていても、サーバー からPCがresponseTextで受け取ってみると化けているという感じです (responseXMLですとSafariはOKですが、Konquerorが化けます)。

 しかし、前項目のようにサーバーからエンコード済みのデータを受け取る ときには文字化けしないのです。ようは、PCから受け取ったデータは、サーバー がURIエンコードをデコードするので、次にPCへ渡す時には生の日本語データに なっているという感じです。そりゃ、Safariにゃ無理です(^^;。

 そこで、私が今試している方法は、PCから手製エンコードしたデータを送り、 サーバーを騙してしまうというやり方です。つまり、%xxのようないかにも 2バイトコードのような文字列ではなくしてしまうことで、サーバー側の文字 コード設定が何であろうと素通りしてくれるように、変換してしまうという わけです。

 たとえば、こんな感じ、変換方法は何でも良いんですけれど、たぶん、 「%xx」の「%」さえなくなれば大丈夫なのではないかと、、、。

//送信前エンコード var senddata = '高橋としろ' var s = encodeURIComponent( senddata ) s = s.split('%').join('/') s = s.split('/E3').join(':') s = s.split('/A').join(';') s = s.split('/8').join(',') s = s.split('/E').join('?') s = s.split(':,1').join('@') oj.open( 'GET' , url+'?test='+ s , true )
// 上記の送信前エンコードの結果、 // 文字列「高橋としろ」は、次のように変換されます 高橋としろ ↓ %E9%AB%98%E6%A9%8B%E3%81%A8%E3%81%97%E3%82%8D ↓ /E9/AB/98/E6/A9/8B/E3/81/A8/E3/81/97/E3/82/8D ↓ /E9/AB/98/E6/A9/8B:/81/A8:/81/97:/82/8D ↓ /E9;B/98/E6;9/8B:/81;8:/81/97:/82/8D ↓ /E9;B/98/E6;9,B:,1;8:,1/97:,2,D ↓ ?9;B/98?6;9,B:,1;8:,1/97:,2,D ↓ ?9;B/98?6;9,B@;8@/97:,2,D //下記デコードは、この変換を逆に辿ります。

//受信後デコード var r = res.GET r = r.split('@').join(':,1') r = r.split('?').join('/E') r = r.split(',').join('/8') r = r.split(';').join('/A') r = r.split(':').join('/E3') r = r.split('/').join('%') var resdata = decodeURIComponent( r )


 変換の塩加減をランダムに生成して、セッション毎に同一のenc/decするように できれば、JavaScript内にも証拠が残りませんし、ましてTCPをモニタするだけでは、 そう簡単には解読できなくなくなると思います。多少はデータも小さくできますしね。

 ま、日本語そのものが暗号な欧米人にはわからない話かもしれませんけど、、、(^^;。あ、太平洋戦争のときの暗号部隊として、アメリカである少数言語部族が活躍したって話を思い出しました、、、関係ないですけど。

追記
2005.5.23
 この自家製符号化による文字化け回避の件については、ここ で実験しました。

3:..つづく、、、



    ( 2006年11月09日 11:25 )

    ああああああああああああああ

    ( 2007年01月24日 20:56 )

    てしと

    僕 ( 2007年03月02日 22:17 )

    すごい

    テストさせてください ( 2007年06月06日 16:05 )

    蚊がおる!!!

    ( 2007年06月14日 15:39 )

    33333

    ( 2007年07月04日 11:59 )

    []{}:;

    \n

    ( 2007年07月04日 17:13 )

    111

    ( 2007年08月24日 09:19 )

    ][]

    ( 2007年09月26日 10:48 )

    てst ( 2007年10月10日 16:47 )

    あああ

    ( 2008年02月08日 12:51 )

    a


    【コメント】(←clickで入力欄open)