前回、web拍手の文字化け要因を解消するという改造をおこなったが、その際にやり方がふたつあるといっていた。
では、文字化けを解消するにはどうすればいいのか。解はふたつある。ひとつはHTTPヘッダ内で文字コードを指定してやること。もうひとつは、先ほど例示したmeta要素をhead要素内に書き加えてやること。
前回の改造は後者、meta要素をhead要素内に書き加えるという方法をとったが、HTTPヘッダを修正するという手段も残されている。実はこちらの方が変更箇所が少なくて楽なのだが、前回はあえてこちらは紹介しなかった。
なので、今回はこちらをやってみようと思う。
今回修正するファイルは、前回同様clapinit.cgiである。無改造のclapinit.cgiだと71行目が修正個所である。
print "Content-type: text/html\n\n";
勘のいい人ならピンとくるのではないだろうか。ここに出てくるContent-typeという文言は、前回の改造で用いたmeta要素のhttp-equiv属性の値である。そしてtext/htmlという文言はcontent属性値に現れていた。
HTTPヘッダというのは、サーバがブラウザからのリクエストに答えて、ファイルを送りだす時にファイルの先頭につけて返すメッセージだ。Content-typeにtext/htmlとあると、ブラウザはこれから送り出されるファイルがhtml文書であると判断する約束になっている。
このContent-typeヘッダにはcharsetというオプションパラメータがあって、それを用いることで明示的にファイルの文字コードを指定することができる。つまりだ、今回はこのContent-typeヘッダにcharsetをパラメータを付け加えようというわけだ。
clapinit.cgiを次のように書き換えるとよい。
print "Content-type: text/html; charset=Shift_JIS\n\n";
これでブラウザは、clap.cgiを呼び出して得られるデータがShift JISで書かれたhtml文書であると判断してくれる。
CGIファイルがShift JIS以外の文字コードで書かれている場合は、以下の例で強調した部分を、それぞれの文字コードにあわせて書き換える。要領は前回とおんなじだ。
print "Content-type: text/html; charset=Shift_JIS\n\n";
print "Content-type: text/html; charset=EUC-JP\n\n";
print "Content-type: text/html; charset=iso-2022-jp\n\n";
print "Content-type: text/html; charset=utf-8\n\n";
いろいろな文字コードの場合とかいって紹介してはいるものの、私はweb拍手CGIをShift JISとUTF-8でしか動かしたことがない。なのでEUC-JPやJISの場合はどうなるのか実はよくわからない。実際ちゃんと動くのかな。
< web拍手改造:文字化け要因を解消する web拍手改造:外部スタイルシートを参照する >