php5.5で文字コードがSJISの場合に機種依存文字が文字化けする

現象
リテラルで記述した機種依存文字が文字化けする
具体的には①とか

謎なのが、機種依存文字であっても一度PHPをくぐると文字化けしていないところ。
最初はDBから取り出した値は文字化けしていないな・・・と思っていたけど
どうも、変数に一度入れると大丈夫のようだ。
HTTPに直書きした文字だけが化ける。

環境
RHEL6.5 _x64
apache2.4.1
PHP5.5.15
Zend Engine v2.5.0

解決方法
php.iniの以下の記述を変更

(旧)zend.script_encoding = SJIS
(旧)mbstring.internal_encoding = SJIS

(新)zend.script_encoding = SJIS-win
(新)mbstring.internal_encoding = SJIS-win

確かに①(マルの中に1ね)とかはSJISにはないから
当たり前といえば当たり前。

思えば、文字コード関連のトラブルは長い付き合い(遠い目)。
Oracleのウェーブダッシュ問題からずっと似たようなことをやってる。

当時は、将来的にはUTF−8に統一されてバラ色の未来になるという話しだったけど
どうやらそうでもないようです・・。

Leave a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です