PHPとShift-JIS
PHPはShift-JISが苦手。
その意味がやっと分かった。
今、Shift-JISで携帯サイトを作成しているが「ソ」をPOSTすると文字に\が付く。
試してないですが
以下の文字も同じ現象が起こるみたいです。
― ツツ ツソ ツツ ツЫ ツツ ツⅨ ツツ ツ噂 ツツ ツ浬 ツツ ツ欺 ツツ ツ圭 ツツ ツ構 ツツ ツ蚕 ツツ ツ十 ツツ ツ申 ツツ ツ曾 ツツ ツ箪
貼 ツツ ツ能 ツツ ツ表 ツツ ツ暴 ツツ ツ予 ツツ ツ禄 ツツ ツ兔 ツツ ツ喀 ツツ ツ媾 ツツ ツ彌 ツツ ツ拿 ツツ ツ杤 ツツ ツ歃 ツツ ツ濬
畚 ツツ ツ秉 ツツ ツ綵 ツツ ツ臀 ツツ ツ藹 ツツ ツ觸 ツツ ツ軆 ツツ ツ鐔 ツツ ツ饅 ツツ ツ鷭 ツツ ツ偆 ツツ ツ砡 ツツ ツ纊 ツツ ツ犾
参考
http://www.syon.co.jp/syontech/tech003.html
コレはPOSTの値に
stripslashes($v);
をかけることで直りました。
その他にもう一つ
MySQLに入っている
「~」という文字がShift-JISでは「?」になる
という問題があって
Verが5.2.3以上ならばPHPの
mysql_set_charset()関数
が使えるみたいですが
Verが5.1…だったので
SET NAMES SJIS
を使っていた所(←ちなみに非推奨です。)
MYSQLのSET NAMES SJISでの
UTF-8 → SJIS等は
拡張JISには対応していないようで変換できないみたいです。
調べているとSJIS-winという拡張JISに対応した文字コードがPHPにあって
mb_convert_string()
で
SJIS → SJIS-win
としてみたものの駄目。
最後はUTF-8でDBから取得したものに
UTF-8 → SJIS-win
で解決。