Up | 「ウェブページの文字化け」のロジック | 作成: 2008-09-02 更新: 2008-09-02 |
すなわち,理屈を考えずに,出口さがしでバタバタします。 ネット検索して,「これで文字化けが解決される」の記事を見つけては,それの真似をします。 そして,これによって却って,いままでまともであったシステムを損なっていきます。 文字化けは,論理的帰結です。 <文字化けして表示される>は,論理的帰結ということでは<文字化けしないで表示される>と同格です。 「文字化けしないで表示されるのが正常で,文字化けして表示されるのが異常」ということではありません。 このことを先ず,しっかりアタマに入れておく必要があります。 文字化けに際しては,くれぐれも「環境設定をやみくもにいじる」ということをしないように。 また,サーバー運用者の場合には,「環境設定をやみくもにいじる」に加えて「サーバーソフトのインストールの際の configure オプションをいろいろいじる」があります。これも,やってはなりません。 以下,文字化けのロジックを示しつつ,クライアントとサーバーそれぞれの「文字化けに対する処方」を示します。 クライアントの場合 あるウェブサイトにアクセスしたとき,ページが文字化けして表示された。 このとき,自分のブラウザの環境設定をいじることは,決してしないように。 問題はサーバーの側にあり,クライアントの側にはありません。 この文字化けはどうして起こったのか? クライアントのブラウザは,サーバーからの文字コードの指示を受け取ります。 ──例えば,「このページの文字コードは Shift-JIS である」とサーバーが言ってきたとしましょう。 文字化けは,ページの実際の文字コードが Shift-JIS でないときに起きます。 こんなことは,実際起こるのか? 起こります。──これについては,「サーバーの場合」のところで述べます。 ただ,文字化けの問題はサーバーの方にあるとしても,あなたは文字化けしたページを読んでみたいと思うでしょう。 このときは,ブラウザのバーメニューにある「表示(View)」から文字コード指定へと進み,文字コードをいろいろ試す,というのが対処法です。 当て推量でいろいろ試す前に,ソースファイルに文字コードの情報がのっていないかを調べるというのも,一つの手です。 ソースファイルのヘッダ部に,つぎのような文字コード指定の METAタグが書かれているかも知れません:
しかし,こう対処しても相変わらず文字化けしている場合も,論理としては,あり得ます。 どんな場合か? つぎのような場合です:
この文字化けは,クライアント側ではどうしようもありません。 文字化けに際してクライアントが行動することは,以上がすべてです。 繰り返しますが,ブラウザの環境設定をいじるということは決してしないように。 一部のウェブページでの文字化けに際してブラウザの環境設定をいじるということは,端的に間違いであり,無意味です。 これまでまともだったシステムを損なうことにしかなりません。 サーバーの場合 ここでは,つぎの場合を考えます: このとき,php.ini における文字コード処理に関する設定は,つぎのようになります:
「default_charset = "Shift_JIS"」の設定により,HTTP プロトコルで,クライアントにつぎの指示が送られます:
UTF-8 のコードで書かれているページがクライアントにおいて UTF-8 で展開されるようにするには,方法をこの後で述べますが,ページ個別に対応していくことになります。 META タグで charset を指定する意味 ページソースの HTML ファイルでは,ヘッダ部につぎのように書くことで文字コードを指示できるとされています。
ブラウザは,あくまでも,HTTP プロトコルで受け取る「Content-Type: text/html; charset=[文字コード]」に従います。 サーバー側で default_charset を指定していないときは,「Content-Type: text/html」が送られてきますが,このときは,ブラウザは自分の環境設定の中で設定している Default の文字コードでページを展開します。 では,METAタグを使った文字コード指定は,まったく意味がないのか? ページのソースファイルに対しこれをブラウザで開くとき,ブラウザは文字コード指示を読みます。 例えば,メールに添付されてきた HTMLファイルがブラウザで開かれる場合,METAタグを使った文字コード指定がその中に書かれていれば,ブラウザはそれを読んで指示に従います。
ページ個別に文字コードを指定する方法 ページ個別に文字コードを指定──例えば,UTF-8 を指定──するとは,HTTPプロトコルで
ソースファイルに
では,これを起こすには,どうしたらよいか? ソースファイルをつぎのように書き始める,というのがこれの答えです:
将来のことを考えると,作成したどのページにも,この方法で文字指定を必ずつけるようにするのがいいでしょう。 |