【php】「あ」が「ぇ」になる。「連」が「炉」に化ける。「〒」が「З」に文字化け。
タイトルのとおり、こんな風に化けました。なぜでしょう。
Before | After |
---|---|
あ | ぇ |
ア | ェ |
、 | : |
◆ | А |
〒 | З |
連 | 炉 |
予想する
計算機のやることだから、必ず規則があるはずだ。
化けた文字をバラして比較してみる。カッコ内はJISにしたときの第1バイトの10進数、第2バイトの10進数。
あ(36、34) → ぇ(36、39) ア(37、34) → ェ(37、39) 、(33、34) → :(33、39) ◆(34、33) → А(39、33) 〒(34、41) → З(39、41) 連(79、34) → 炉(79、39)
ASCIIの34が39になっている感じ。ASCIIの34は”(ダブルクォーテーション)、39は’(シングルクォーテーション)。
該当のプログラムに発見。メール関連で文字列をJISにしてからこんな置換をしていた。
str_replace("\"", "'", $message);
再現する
$x = "ご連絡ありがとうございます。"; $x = mb_convert_encoding($x, 'JIS', 'EUC-JP'); $x = str_replace('"', "'", $x); echo $x;
再現できた。
ご炉絡ぇりがとうございます。
JISにしてから置換は避けた方がよいでしょう。
コメント