MySQLとUTF-8での「~」の文字化けにハマる
「~」と「〜」 とUTF-8、そしてEUC-JP…
とある案件で、フロント部とCMSを別々に開発していました。
自分はフロント部を担当していて、FlexとPHPを使い、SWFとHTMLによるユーザインターフェースを制作していましたが、CMS側で登録したデータをSWFへ持ってくると、「~」が化けてしまう・・・。
DBの文字コードがUTF-8で、訳あってPHPではEUC-JPを使用(この時点でどうかと思いますが・・・)していて、DBからはMySQLの文字コード変換でデータを引っ張っていました。
この時点で、すでに化けてる(「?」になってしまっている)。
これは、MySQLが文字コードの変換に失敗したときに出る現象。
調べてみると・・・
こちらのサイト様を参考にさせていただきました。
EUCへの変換時に問題があったことが発覚。
MySQLによる文字コード変換をスルーすることで、文字化け自体は回避。
そもそも、サイトの文字コードとシステム文字コード、そしてDBの文字コードが統一されていなかった時点で問題ですね(汗)
けっこう根深い・・・
無事、PHPまでは原型をとどめたまま、データを取得。しかし、今度はそのデータをSWFで表示した際に問題が・・・。
「□」のような表示になってしまってます。
う~む、どうしたもんだろう・・・。
先ほどのサイト様を参考にさせていただきながら、さらに調べる。
「~」は「FULLWIDTH TILDE(全角チルダ)」
「〜」は「WAVE DASH(波ダッシュ)」
で、なにやらWindowsのこれらの文字の取り扱いが怪しい・・・。
とりあえずPHP側で以下のような置き換えをおこない、SWFでも表示されるようになりました・・・。
$ptn = pack("H*", "E3809C");
$rep = pack("H*", "EFBD9E");
// 置き換え!
$result = str_replace($ptn, $rep, $result);
が、どうしてこんなことになってるのか、もっと調べる必要がありそうです。
環境によっては違った結果になるのかも・・・。

