文字コードの憂鬱
HTMLでも時折悩まされるHTML
PHPでの方が悩む事の方が多いんだけど、
今後ミスを減らすためのメモのためにエントリー
コーディングをしていて、作っているときは何も問題は無かったのに、
サーバーに入れて確認したら、文字化けしていて見れなくなった!!
なんてことは無いでしょうか?
僕はHTMLを勉強しはじめのときにものすごく悩まされました。
サーバーによって違う
そんなによくわかっていないのだが、
どの文字コードをどのようにして読むかはサーバーの設定によって違うようだ。
今の僕の文字コード環境は、Macのローカル環境だとUTR-8とEUCに対応。
会社のサーバーは、一つがShift-JISに対応で、もう一つがEUC-JPとバラバラ。
EUC-JP対応のにUTF-8でとあるCMSを入れたら文字化けが激しすぎたし、
最初は何がなんだかわからなくなっていた。
HTMLでの文字化け
自分のMacローカルでの話だけど、
下記のようなHTMLで、エンコーディングをShift-JISにしていたら、
文字化けしてしまった。
HTMLソース
<html> <head> <title>文字コードテスト(Shift-JIS)</title> </head> <body> <p>サンプルテキスト</p> </body> </html>
表示した結果
■Firefoxの場合
■Operaの場合
ブラウザによって文字化けの表示のされ方はちょっとだけ違うが、
結局文字化けが起こっていることには変わりない。
ちなみに、上記の場合、サーバーがUTF-8のみしか受け付けないので、
meta要素のcharsetでShift-JISを指定したとしても文字化けは解消されなかった。
サーバー環境に対応したエンコーディングを指定しないとだめだということだ。
どのようにしたらいいか
文字コードは、エディタで作成時点から設定しなくてはならないが、
それだけではなく、meta要素での指定も必要である。
その2カ所が合致していて、
且つサーバー環境に適応しているなら問題なく表示される。
つまりのサンプルは以下のように修正すればよい
修正後のHTMLソース
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>文字コードテスト(UTF-8)</title> </head> <body> <p>サンプルテキスト</p> </body> </html>
保存はかならずUTF-8と、meta要素に合わせて設定しておく事を忘れずに。
UTF-8以外であれば、保存のエンコーディングと、
metaのcharsetも修正していおくこと!
PHPやデータベースでも文字コードは要注意
まだ勉強途中なのだが、PHPで入力したテキストを操作するときや、
データベースなどに保存や取り出しを行う際も、
この文字コードが厄介になってくるようだ。
僕の環境下の場合、データベースへの書き込み・読み出しは
問題なく動作し、表示されるのだが、
データベース上でどのように保存されているのかを確認したら、
そこでの表示は文字化けをしていた・・・なんて状態にもなっていた。
この点に関してはどのように修正したらいいのかわからないため、
現在も引き続き勉強中だったりする。