2007年05月19日(土) [長年日記]
[English!]
[한국어]
[今日は何の日]
§1 文字化け
顧問先のサイトが人手に渡り新しくなったのだが、PHPではき出されるHTMLはxhtml1.0でUTF-8である。これからの時代にふさわしいと言えばふさわしいのだが文字化けが出てなかなか解決しないようだ。どうやらHTTPヘッダの情報とCharsetが合ってないような感じです。ちなみに該当ページをAnotherHTMLLintでチェックしてみるとHTTPレスポンスヘッダが確認できるのですが、Content-Typeを見てみるとtext/htmlとだけ帰ってきています。Charsetが送出されてないのがわかります。これでブラウザが迷ってしまうのではないでしょうか。
サーバーはFreeBSDを使っているはずなので何も指定しないとEUC-JPが送出されているのではないかと思うのですがレスポンスヘッダには何も出て来ないのでそもそもCharsetは送ってないのかも知れないですね。レンタルサーバーの場合複数のユーザがいるのでそれぞれのユーザが自分のサイトに合ったCharsetを送出すればいいので.htaccessで設定して下さいと言うことかも知れません。
AddType "text/html; charset=UTF-8" .html
この1行で全てが解決しそうな感じですが、どうなんでしょうか。この1行でHTTPレスポンスヘッダの情報にCharsetが送出するのを確認できて、このMETA情報とHTMLファイルの
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
が合っていれば文字化けが無くなるのではないかと思うのですが、まぁ、今となっては人ごとなので高みの見物と行きましょうか。サーバーの引き渡しの時に設定した.htaccessの内容はAddTypeは含んでいないのでそのままになっている可能性は高いですね。
ひょっとしてsuffixが.phpだと
AddType "text/html; charset=UTF-8" .php
としなければならないでしょうか。よくわからねぇ(^^;
php なファイルがすべて text/html とは限らないかもしれないので、text/html にしたい、php スクリプトのほうで、<br>header("Content-Type: text/html; charset=UTF-8");<br>しとくほうがいいかもしれませんね。
スクリプトでの設定ですね。そう言えばそう言うたぐいの文字化けがありましたね。perlで経験したような憶えがあります。Mysqlの方でも文字化けがあると聴いたのですが、化けている文字が???のようにクエスチョン3つになっているのですがこれはいわゆるUTF-8の特徴ですよね。
AddTypeで指定するとUTF-8でない場合困りますよね。Perlの場合<br>print "Content-type: text/html; charset=shift_jis\n\n"; なんて書いて<br>解決したことがありました。