プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になります。
PC用システムがあり、一部データを携帯電話からも更新したいと思い、既に稼働しているUTF-8のシステムに機能追加しています。
携帯はSJISのみとの事ですので、SJISで携帯用サイトを作成し、DBからデータの読込、表示など問題なくできるようになりました。

携帯サイトでHTMLフォームを作成しており、そこからDBへ書き込む際に、判る範囲ですが以下の文字が文字化けして登録されてしまいます。。

予→浴
ソ→メ

他にも文字化けしそうな感じなのですが、なぜ上記の特定文字だけ文字化けするのでしょうか・・・?
例えば
大阪
東京
名古屋
アップル
などは一切文字化けせず問題ありません。

PHP自体はSJISで作成しており、DB登録時にmb_convert_encoding($txt,"UTF-8","SJIS")でUTF-8としています。


どなたかお詳しい方、ご教授のほど宜しくお願い致します<(_ _)>

A 回答 (2件)

ご参考。


http://ja.wikipedia.org/wiki/Shift_JIS#2.E3.83.9 …

>既に稼働しているUTF-8のシステムに機能追加しています。
>携帯はSJISのみとの事ですので

だったら「入力を受け取った瞬間に、SJISからUTF-8に変換すべき」です。

>DB登録時にmb_convert_encoding($txt,"UTF-8","SJIS")でUTF-8としています。

このタイミングだと「既に手遅れ」です。DB登録前の段階で「SJISである事が想定されてない」ですから。

「UTF-8のシステム」ってのは「入力の段階で、入力がSJISである事を想定してないシステム」って意味です。

なので「入力を受け取った瞬間に、SJISからUTF-8に変換」して、想定外のデータを入力から流し込まないようにしなければなりません。

>PHP自体はSJISで作成しており

「PHP自体の文字コード」と「入力の文字コード」には、なんの関連もありません。

PHP自体が何語で書かれていようが「入力そのものがUTF-8しか想定してない」なら「入力直後に入力データをUTF-8に変換する」必要があります。
    • good
    • 0

SJIS2バイト目が"5C"の場合に発生する大変有名な文字化けですね。


この問題は奥が深いので、ココの少しのスペースで語れるものではありません。

沢山のサイトで漢字を扱う場合の設定や回避方法などが開示されていますので、
それらをよくお読みになって勉強していただければと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!