先日、CakePHPで携帯サイトを作るやり方を書いたのだが、CakePHP内部では文字コードをSJIS-winに変換してくれるのだが、携帯で見てみると、どうしても文字化けしてしまう、という現象に陥ってしまった。
そこで、いろいろ原因を探ってみた。
最初に考えたのはUTF-8のBOM問題。
CakePHPのスクリプトはUTF-8で書いていて、それをmb_convert_encodingして、SJIS-winに変換している。そのUTF-8のファイルにBOMがついてしまっているのでは、と思い、以下のサイトを参考にしてみた。
このサイトのように、BOMがついているファイルを使うと、レスポンスヘッダーより前に不要なコード(EF BB BF)が送信され、文字化けを起こしてしまうというものだ。このサイトのスクリプトを参考にSJIS-winに変換した出力バッファーの最初の3バイトを削ってみたが変わらず。
ということは、BOMが原因ではないということだった。
で、よくよく原因を考えてみた。
いちをその携帯サイトはPCからの閲覧を制限しているわけではなかったので、PCで表示してみると、携帯表示と同様に文字化けする。
が、文字化けしているページの文字コードをSJISに再設定してみると、きちんと表示されるではないか。
ということは、文字コードはきちんとSJIS-winに変換されているにもかかわらず、WebサーバがUTF-8としてレスポンスヘッダーをはき出していることになる。要は、レスポンスヘッダのContent-Typeに問題があったわけだ。
試しに、Firefoxのアドオン、Firebugでレスポンスヘッダーを見てみると、
Content-Type text/html; charset=UTF-8
出ている。
むぅ。。。中身はSJISだが、文字コードをUTF-8として出力していたため、ブラウザが自動的に文字コードをUTF-8としてしまったらしい。
実はCakePHPでサイトを構築する際は、ローカルマシンでXAMPPを使って作成しているのだが、localhost経由ではきちんとSJIS表示されていた。
この違いはなんだ?とおもって、XAMPP経由でのレスポンスヘッダを見てみると、
Content-Type text/html;
となっている。。。。
なんでこっちは文字コードがついてないんだ?と。
最初はWebサーバであるApacheを疑ってみた。
しかし、httpd.confにはdefault_charsetは設定していない。というか、この設定でレスポンスヘッダが変化するかどうかも知らない。。
ということは、あとは考えられるのは、PHPの設定であるphp.iniしかないと。
そこで、上記二つの違いをphp.iniに絞って見てみると、、、UTF-8とレスポンスヘッダに追加されるphp.iniには、
default_mimetype = "text/html" default_charset = "UTF-8"
と書いてあった。。。ビンゴ。
試しに、以下のように変更したらうまくいった。
default_mimetype = "text/html" default_charset = none
なるほど。
しかし、この設定はセキュリティー上、あまりよろしくないのかもしれない。
けど、PCサイトをUTF-8で表示し、携帯ページをSJISでやる以上、この設定しかないような気もする。
ちなみに、これに関しては以下のサイトが参考になった。
う~ん、、、かなり時間を食ってしまった・・・
さ、これでさくさく携帯サイトを作成しよっと!
これを機に?、以下の書籍を購入してみた。
関連記事
- CakePHPをやっと始める気になったので、はまった部分をメモっておく
- [CakePHP] 1.3ではページタイトルの出し方が変わっている
- [CakePHP] スタイルシートをコントローラーで作ってみる
- [CakePHP] Cannot modify header information – headers already sent
- [CakePHP] 画像の圧縮比を変えて出力する
- 「CakePHP修行」を追う #5
- CakePHP 1.2でのSQLインジェクション対策
- [CakePHP][1.3] でCKEditorを使う
Sponsored Link
Google+
zenback
- Newer: はてなブックマークカウンターを付けてみた
- Older: Movable Type 4.24リリース
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://www.multiburst.net/sometime-php/2009/02/refine-phpini-file/trackback/
- Listed below are links to weblogs that reference
- 携帯サイト作成のためにphp.iniを見直してみた from Sometime PHP
Additional comments powered by BackType






