- ベストアンサー
文字コード(UTF-8)文字化けについての原因と解決方法は?
- phpのバージョン5.2.8を使用している際、文字コード(UTF-8)文字化けの問題が発生します。
- 文字コード(UTF-8)文字化けの原因は、mb_convert_encoding関数の引数にASCII、JIS、EUC-JP、SJISの文字コードを指定しているためです。
- 解決するためには、mb_convert_encoding関数の引数からASCII、JIS、EUC-JP、SJISの文字コードを削除する必要があります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
http://www-ise3.ist.osaka-u.ac.jp/miura/?PHP%20GET%2FPOST%A5%E1%A5%BD%A5%C3%A5%C9%A4%C7%A4%CE%C6%FC%CB%DC%B8%EC%A4%CE%CA%B8%BB%FA%B2%BD%A4%B1%CB%C9%BB%DF 「PHP GET/POSTメソッドでの日本語の文字化け防止」 こちらの記事をお読みください。 サンプルの文字数が少ないと、UTF-8/EUCのあたりで誤検出します。 その記事の中の「文字化けを防止する方法 」という箇所のように設定する方法が一般的のようです。
その他の回答 (2)
- tany180sx
- ベストアンサー率63% (239/379)
autoじゃなくて省略でした。省略でdetect_orderが参照されます。 環境のみでなんとかする場合はdetect_orderを適切な値にしておきます。 1.変換を行わない 2.入力のエンコーディングを制限する 3.使用するエンコーディングを優先検出する 4.誤検出率を下げる => 特定文字の使用や検出用文字数を増やす フォーム絡みでいえば mbstring.http_input はオフにしておくべきかいな。
- tany180sx
- ベストアンサー率63% (239/379)
$org_text2 = "上"; と書いた時点でその文字列は 内部文字コード(internal_encoding)になるわけですが 変換する意味あるのでしょうか? あと第3引数はエンコーディング検出順序ですが、 先頭から優先となります。ASCIIを優先させる意図は?? 例:eucJP-win,UTF-8,SJIS-win,jis もしくは auto また、検出は完璧ではないです。
補足
ご回答ありがとうございます。 > 変換する意味あるのでしょうか? 本来のプログラムはフォームより入力された文字を読み込み、 utf-8 に変換しています。 フォームでの入力でも $org_text2 = "上"; としても どちらも同じように見、一は化けない。上、実は化ける、といった 入力した文字によって文字化けしたりしなかったりといった弊害があります。 どちらも共通した原因と考え、質問しました。 >ASCIIを優先させる意図は?? autoでうまくいかなかったため、上記のようにしました。 autoはASCII,JIS,Shift_JIS,EUC-JP,SJIS" に展開されるので、 上記のようになっています(EUC-JPは記載忘れです、済みません)。 以上私に誤解がありましたらご指摘お願いします。
お礼
おぉ!まさにこれっぽいです。 まさか文字によって認識されたりされなかったりするとは。 ご紹介いただいたURLを参考にプログラムを修正してみます。 ありがとうございました。