AjaxでSafariの文字化け対策withPHP
Ajaxを利用する際にいつも苦しめられているのがSafariの文字化けです。
Windows+IEやLinux+FireFoxでは全然問題にならないようなことが、Safariでは上手くいかない。下手に色々な環境があるから、ついついそれぞれで動作確認をしてしまい、問題を発見してしまう。僕もWindowsだけしかもってなかったら、こんなことには気付かずに幸せだったかもしれない。世の中には知らない方がいい事もあるのだと考えさせられます。
しかし、知ってしまったからには対応しなくてはならないということで、これまでもAjaxのライブラリを利用する度にちょこちょこと変更をしてきました。Yahoo UI LibraryやPrototypeを改変したことは以前の記事でも書きました。
しかし、こんなことしなくても解決できる方法がわかってしまいました。今までの苦労は何だったんだろう...でも、今までの苦労があったからこそ今回の発見を喜べるのだと思えば、幸せもまた考え方一つなのだと痛感されられます。
では、早速その方法を紹介します。
それはいたって簡単で、PHPでの出力に「rawurlencode」を利用し、受け取る側のスクリプトで「decodeURIComponent」を使うというものです。
例えば、PHP側に
--- sample.php --- <?php $str = "これはテストです。"; echo rawurlencode($str); ?>
と書き、これを読込む際にYahoo UI Liblaryを用いるなら、
---- sample.js --- function updateObject() { var callback = { success:function(httpObj) { alert(decodeURIComponent(httpObj.responseText)); }, failure:function(httpObj) { alert("エラー"); } }; YAHOO.util.Connect.asyncRequest("GET", "sample.php", callback); }
と書けば良いみたい。
でも、人によっては一つのPHPスクリプトの中にたくさんechoやprintを利用している人がいるようで、rawurlencodeを追加すると言っても一苦労する人がいるかもしれません。結果の出力用に関数を用意するとか、出力は一つの変数に格納するようにして最後にその変数を出力するだけにするとかいう工夫が必要なるでしょう。
とりあえず、作成済みのサイトはまた別の修正する機会に対応するとして、これからはこの手法を使っていこうと思います。
本当にわかると簡単なんだけど、思いつくまでは大変ですよね。まさに「コロンブスの卵」ですね。
| 固定リンク
コメント