へんこつ日誌

Oral_Top_Anchor
トップ «前の日記(2007年05月18日(金)) 最新 次の日記(2007年05月20日(日))»
RSS feed


ここから本文

2007年05月19日(土) [長年日記]

§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

としなければならないでしょうか。よくわからねぇ(^^;

本日のツッコミ(全3件) [ツッコミを入れる]
§1 のり (2007年05月20日(日) 09:49)

php なファイルがすべて text/html とは限らないかもしれないので、text/html にしたい、php スクリプトのほうで、<br>header("Content-Type: text/html; charset=UTF-8");<br>しとくほうがいいかもしれませんね。

§2 NOB (2007年05月20日(日) 11:07)

スクリプトでの設定ですね。そう言えばそう言うたぐいの文字化けがありましたね。perlで経験したような憶えがあります。Mysqlの方でも文字化けがあると聴いたのですが、化けている文字が???のようにクエスチョン3つになっているのですがこれはいわゆるUTF-8の特徴ですよね。

§3 Nao7 (2007年05月20日(日) 14:04)

AddTypeで指定するとUTF-8でない場合困りますよね。Perlの場合<br>print "Content-type: text/html; charset=shift_jis\n\n"; なんて書いて<br>解決したことがありました。