:::: MENU ::::

PHPの文字化け対策

Pocket

ターミナルとかシェルの文字コードを変更

$ sudo vi /etc/sysconfig/i18n

LANG="ja_JP.UTF-8"
SUPPORTED="ja_JP.UTF-8:ja_JP:ja"

ファイルの文字コードを変更

文字コード変換コマンドnkfの使い方まとめ linux – Knowledge Database IT
UTF-8に変更。デフォはISO-2022-JPになってる可能性がある。

$ nkf -w --overwrite index.php
$ nkf -g index.php ←変更されたか確認

php.iniを変更

$ sudo vi /etc/php.ini

 output_buffering = Off
 ;default_charset = UTF-8

 [mbstring]
 mbstring.language = Japanese
 mbstring.internal_encoding = UTF-8
 mbstring.http_input = pass
 mbstring.http_output = pass
 mbstring.encoding_translation = Off
 ;mbstring.detect_order = UTF-8,EUC-JP,SJIS,JIS,ASCII
 mbstring.detect_order = UTF-8,eucJP-win,SJIS-win,JIS,ASCII
 mbstring.substitute_character = none;
 ;mbstring.func_overload = 0
 ;mbstring.strict_encoding = Off

httpd.confを変更

$ sudo vi /etc/httpd/conf/httpd.conf 

 AddLanguage ja .ja    ←先頭に持ってくる
 LanguagePriority ja    ←先頭に持ってくる
 #AddDefaultCharset UTF-8 ←コメントアウト

半角カナでPOST/GETデータが文字化けする場合

tomimemo – その他メモ
PHP内部のエンコーディング自動判定がミスっているらしい。
短い入力文字だとたまにミスる。
ダミーで日本語文字が書かれたhiddenタグを入れておくといいらしい。

<form>~</form>の中に
<input type="hidden" name="hidden" value="日本語判定用文字列">
Pocket


So, what do you think ?