• ベストアンサー

半角カタカナ2文字を入力すると

教えてください。 フォームから受け取って、下記の、処理をしています。 「半角カタカナ2文字を入力」すると、下記の現象になります。 この場合どのようにするのか、誰か教えてください。 [プログラム] $str = mb_convert_kana($str, "KVC"); $str = mb_convert_encoding($str,"SJIS","auto"); echo $str; [例] 1文字の場合 : 半角 ス → ス 2文字の場合 : 半角 スシ → 充 3文字の場合 : 半角 スシス → スシス

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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のエンコーディング

ni1ni2ni3
質問者

お礼

ご回答ありがとうございます。 php設定を回答通りに設定した所、うまく動きました。 これで、次の処理に進めそうです。 ありがとうございました。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

短い文字列を渡しての文字コードの自動判別は当てにならないと考えたほうがよいです。 ShiftJISでの半角かなのスシをビットパターンで見ると E:\it>echo スシ|hexdump 00000000: BD BC 0A であり(上記は実際には半角かなです)、これはEUC-JPで見ると E:\it>echo スシ|nkf -E -s 充 となります。 奇数バイト渡したときにうまくいっているように見えるのは、そういう構成の EUC-JPでの文字列がありえないからでしょう。 何らかの手段で入力のエンコーディング情報を得るようにしたほうがよいと思います。

ni1ni2ni3
質問者

お礼

ご回答ありがとうございます。 下記の通りテストしています。 「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; }

関連するQ&A