記事一覧

PHP 文字化け問題、解決

 新環境に移行して全ての設定が初期化された後、設定ミスをしたため文字化けを起こしていましたが、本日、解決しました。AA登録制限も解除しましたので、よろしくお願いします。

続き

 今回の問題は Shift-JIS 固有の問題、「5C 問題」が原因でした。

 Shift-JIS はいくつかの文字に文字コードとしてエスケープ文字と見分けが付かないコードを含んでいるものがあり、エンコード処理が行われた際にこの部分がエスケープ文字として判断され、文字化けを引き起こすそうです。この問題の解決策を手動で見るにはエスケープ文字を該当文字の後ろにおいてみます。

 表示 → 侮ヲ
 表\示 → 表示

 んで、これを PHP 内部で解決するには php.ini で以下の設定を行います。

 magic_quotes_gpc = On
 magic_quotes_gpc = Off にして stripslashes 関数を使わないようにする。
 magic_quotes_gpc 機能は PHP 5.3.0 で非推奨になったそうなので Off にしました。
 エスケープ文字に関する問題だったので、stripslashes 関数を使わないようにしたら文字化けはしなくなりました。……他の問題起こさないかな;

 ただ、これだけだと 5C 問題しか解決できないので、他の文字化けにも対応するため、自動エンコード処理を停止しておきます。

mbstring.internal_encoding = SJIS
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
mbstring.substitute_character = none;

PHP モジュールのコンパイル時に --enable-zend-multibyte をつけているなら以下もつけとくといい?
mbstring.script_encoding= SJIS

 Shift-JIS はプログラマーからは嫌われる文字コードらしいですが、そんな事言っても日本国内での普及率はダントツなので対策しなくてはならない。

 やれやれ、今回も振り回されました。次回からは乗りこなせればいいんだけども。

コメント一覧