SOFTELメモ

Softel Inc.

【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にしてから置換は避けた方がよいでしょう。

関連するメモ

コメント