- ベストアンサー
PHPのSJISからUTF-8への変換で文字化け
- PHPを使用してSJISからUTF-8への変換を行う際に、一部の文字が文字化けしてしまう問題が発生しています。特定の文字のみが文字化けする原因と、その対処方法について教えてください。
- PHPのSJISからUTF-8への変換で文字化けが発生する理由について、特定の文字のみが影響を受ける原因を解説します。また、文字化けを回避するための対策方法もご紹介します。
- SJISからUTF-8への変換で特定の文字のみが文字化けする現象について、その原因と解決策について詳しく解説します。PHPのmb_convert_encoding関数を使用して文字化けを回避する方法も紹介します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ご参考。 http://ja.wikipedia.org/wiki/Shift_JIS#2.E3.83.90.E3.82.A4.E3.83.88.E7.9B.AE.E3.81.8C5C.E7.AD.89.E3.81.AB.E3.81.AA.E3.82.8A.E3.81.86.E3.82.8B.E3.81.93.E3.81.A8.E3.81.AB.E3.82.88.E3.82.8B.E5.95.8F.E9.A1.8C >既に稼働している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に変換する」必要があります。
その他の回答 (1)
- singlecat
- ベストアンサー率33% (139/418)
SJIS2バイト目が"5C"の場合に発生する大変有名な文字化けですね。 この問題は奥が深いので、ココの少しのスペースで語れるものではありません。 沢山のサイトで漢字を扱う場合の設定や回避方法などが開示されていますので、 それらをよくお読みになって勉強していただければと思います。