もくじ
エンコーディングに気をつける
- 外部ファイルを読み込んだ時
- フォームから日本語が送信される時
なぜ
- 日本語はマルチバイト文字なので、英語圏のように1バイト文字ではない。
- 読み込んだ外部ファイルの情報がSJISかつPHPスクリプトがUTF-8の場合に文字化けが発生する。
- 外部から受け取った日本語の情報はエンコーディングする必要がある
対策① mb_convert_encoding()
外部ファイルから読み込んだ情報をmb_convert_encoding()でUTF-8に変換する
$data = simplexml_load_file($url); $data = mb_convert_encoding ($data , 'UTF-8', 'ASCII, JIS, UTF-8, SJIS');
第3引数をautoにする場合は、mbstring.language = Japaneseでないと機能しない。
だから、明示的に指定しています。
対策② 日本語向けphp.ini
[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,SJIS,EUC-JP,JIS,ASCII mbstring.substitute_character = none mbstring.func_overload = 0 mbstring.strict_detection = Off ;mbstring.http_output_conv_mimetype= ;mbstring.script_encoding=