- ベストアンサー
半角カタカナ2文字を入力すると
教えてください。 フォームから受け取って、下記の、処理をしています。 「半角カタカナ2文字を入力」すると、下記の現象になります。 この場合どのようにするのか、誰か教えてください。 [プログラム] $str = mb_convert_kana($str, "KVC"); $str = mb_convert_encoding($str,"SJIS","auto"); echo $str; [例] 1文字の場合 : 半角 ス → ス 2文字の場合 : 半角 スシ → 充 3文字の場合 : 半角 スシス → スシス
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
HTMLのエンコーディングとPHPの内部エンコーディングを別にするなどの特殊なケースを除けば、そもそも文字コード変換などする必要はありません。昔のブラウザ(Netscape 4.Xなど)は、まれにおかしなエンコーディングでPOSTやGETパラメータを送ってくることがありましたが、最近主流のブラウザはそんなことはないからです。 HTMLとPHPの内部エンコーディングが一緒である場合、PHPの設定は以下のようにします。 default_charset = ご使用のエンコーディング ;output_handler (コメントアウトする) mbstring.encoding_translation = Off mbstring.internal_encoding = ご使用のエンコーディング 半角カナを全角カナにしたい場合は、 $str = mb_convert_kana($str, "KV"); とします。 HTMLはSJIS、PHPの内部エンコーディングはEUC-JPなど、文字コードを別にしたい場合は、以下のように設定します。 default_charset = HTMLのエンコーディング output_handler = mb_output_handler mbstring.encoding_translation = On mbstring.http_input = HTMLのエンコーディング mbstring.http_output = HTMLのエンコーディング mbstring.internal_encoding = PHPのエンコーディング
その他の回答 (1)
- sakusaker7
- ベストアンサー率62% (800/1280)
短い文字列を渡しての文字コードの自動判別は当てにならないと考えたほうがよいです。 ShiftJISでの半角かなのスシをビットパターンで見ると E:\it>echo スシ|hexdump 00000000: BD BC 0A であり(上記は実際には半角かなです)、これはEUC-JPで見ると E:\it>echo スシ|nkf -E -s 充 となります。 奇数バイト渡したときにうまくいっているように見えるのは、そういう構成の EUC-JPでの文字列がありえないからでしょう。 何らかの手段で入力のエンコーディング情報を得るようにしたほうがよいと思います。
お礼
ご回答ありがとうございます。 下記の通りテストしています。 「EUC-JP」にすると半角カナは出来ますが、全角文字が文字化けしてしまいます。 どのようにしたら、いいのでしょうか? [プログラム] $moji_code = mb_detect_encoding($str); switch ($moji_code){ case "ASCII": echo "$moji_code<BR>\n"; echo "$str\n"; break; case "SJIS": 「EUC-JP」にすると出来ますが、全角が文字化けしてしまいます。 $str = mb_convert_encoding($str,"EUC-JP","SJIS"); echo "$moji_code<BR>\n"; echo $str; break; case "EUC-JP": echo "$moji_code<BR>\n"; echo "$str\n"; break; }
お礼
ご回答ありがとうございます。 php設定を回答通りに設定した所、うまく動きました。 これで、次の処理に進めそうです。 ありがとうございました。