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

で解決。

コメントはまだありません

コメントはまだありません。

この投稿へのコメントの RSS フィード。 TrackBack URI

コメントする

WordPress Themes