文字コード変換を行う際の判定ミスの場合
症状
- 「写」のみを入力した場合に正しく表示されない。
- 「(別の文字列)写」などは正しく表示される。
- 「写(別の文字列)」などは正しく表示されない。
- 「シフ(半角)」を入力すると「写」と表示される。
- 「松」は入力されない。
環境
発症環境は、
PHP・Mojavi(多分この場合の影響としては関係ないと思いますが)使用に発生しました。
流れは、Shift_JIS(入力画面) → EUC-JP → Shift_JIS(入力画面)
また調べている時に分かったことですが、jcode.plでもバージョンによってこのエラーが発生するみたいです(同じ症状という意味で)
原因
最初のエンコード(Shift_JIS(入力画面) → EUC-JP)を行う際に記述のコード
$str = mb_convert_encoding($str, "EUC-JP", "auto");
上記を記述することによって、$str を EUC-JP に変換できます。
通常は"auto" を指定すると 元の文字コードを自動検出して変換を行います。
しかし、この場合に問題となったのは、なんらかの原因で正しく自動検出が出来なかった為に、正しく変換が行われなかった為に文字化けが発生したと思われます。
対応
- autoは使用せず、(この場合はShift_JIS)厳密に記述する。文字コードが不明な場合は下にあるコードを記述すると現在のコードが分かります。
文字コードの特定
使用している文字コードや、表示している文字コードが不明の場合は次の方法で確認する事が可能です。
表示→エンコード
string i18n_discover_encoding(string str[,string lang])
を記述すると文字列の文字コードが返ってきます。
最終更新:2006年07月07日 10:18