• ベストアンサー

フォームから送った半角カナの文字化け回避

こんにちは。 フォームのテキストボックスで半角カナを入力して送信すると、文字が化けることがあります。 どうにか回避できないでしょうか、、、^^; 「半角カナを入力するな!」という常識的な回答(笑)はナシでお願いします。^^; ちなみに、ソースは以下です。 最初submitのところのname属性を書いていなかった時はすべて文字化けを起こしていたのですが、name属性を追加したら最初の入力だけ化けることがある、という現象が置きました。 ちょっとはまってます、、、>< <? header( 'Content-Type: text/html;charset=Shift_JIS' ); echo( "<html>\n" ); echo( "<head>\n" ); echo( "<title>文字送信テスト</title>\n" ); echo( "</head>\n") ; echo( "<body>\n" ); if(isset($mode) == FALSE || $mode == ""){ echo( "<form action=\"test.php\" method=\"post\">\n" ); echo( "<input type=\"hidden\" name=\"mode\" value=\"1\">\n"); echo( "<input type=\"text\" name=\"KANA\" istyle=\"1\"><br>\n" ); echo( "<input type=\"submit\" name=\"\" value=\"送信\">\n" ); echo( "<input type=\"reset\" value=\"クリア\">\n" ); echo( "</form>\n" ); }else{ echo("KANA=$KANA<br>\n"); } echo("</body>\n"); echo("</html>\n"); ?>

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

  • ベストアンサー
回答No.5

PHPメーリングリストの過去ログで、こんなの見つけました 「[PHP-users 3054] Re: SJIS->EUC bug ?」より抜粋 ------------------------------------------------- PHP4.0.3pl1+jstring moduleとPHP4.0.6 with mbstringでは、文字コード判定 ルーチンに変更があり、挙動が変わっているため、同じスクリプトでも 文字化けが発生する可能性がある。 文字コード判定ミスに関してはPHP4.0.3pl1+jstring moduleでも起こりうるので 文字コード判定を助けるため<FORM ~>と</FORM>の間に、たとえば <input type="hidden" value="日本語判定用文字列">等を埋め込むとよい。 文字列は、判定を助けるために十分な長さの物を指定した方がよいようだ。 ------------------------------------------------- やっぱり、おまじないは必要なんですね。

noname#45976
質問者

お礼

おおお!なんてグッドな回答!!(≧▽≦)b 本当にそういう解決法でよかったんですね~^^ こういう問題って検索するの、大変ですよね!(なんてキーワード打ってよいやら^^; スバリな回答見つけてくださって、どうもありがとうございました~!!m(_ _)m

その他の回答 (4)

  • natural
  • ベストアンサー率37% (419/1115)
回答No.4

おお、ようやくご存じの方の回答が付きましたね。(^_^) ところで、 >質問締め切りの際は、ぜひポイントをもらってくださいね^^ ということですが、そのお気持ちだけ有り難く頂いておきます。 それよりも、NIGHT2000さんのお役に立った方に差し上げてください。 心のこもったお礼だけで充分です。(ポイントよりも嬉しいです) 納得のいく回答が頂けると良いですね。(^_^)

noname#45976
質問者

お礼

たびたびどうもありがとうです!^^ おかげさまでよい回答を得ることが出来ました。 不可思議な現象にハマってちょっと放置気味(汗)だったので、naturalさんの回答で再度いろいろと試す気力がわき、とても助かりました!^^ 捨てずに質問してみてよかったです~(*^-^*) 本当にどうもありがとうございました!m(_ _)m

回答No.3

「その解決方法に異議あり!」というわけではありませんが、 私の環境で正常に動作するプログラムを紹介します。 IE version5.0 PHP version4.0.6(Miracle Linux Ver.2.0) 確かにNIGHT2000さんのプログラムは文字化けすることを 確認しました。 でも、それをほとんど修正していない私のプログラムは 正常に動作するのです。なぜでしょうか? 「hiddenで全角文字をダミー送信」のおまじないをして いるPHP3のプログラムを見たことがあります。 でも、4.0.6ではそんなことを意識しなくてもよいと 思っていたのですが間違いなのでしょうか? 詳しい人教えてください。 <? header( 'Content-Type: text/html;charset=Shift_JIS' ); echo( "<html>\n" ); echo( "<head>\n" ); echo( "<title>文字送信テスト</title>\n" ); echo( "</head>\n") ; echo( "<body>\n" ); if(empty($sub)){ echo( "<form action=\"test3.php\" method=\"post\">\n" ); echo( "<input type=\"text\" name=\"KANA\" istyle=\"1\"><br>\n" ); echo( "<input type=\"submit\" name=\"sub\" value=\"送信\">\n" ); echo( "<input type=\"reset\" value=\"クリア\">\n" ); echo( "</form>\n" ); }else{ $str = mb_convert_kana($KANA, "KV"); echo("KANA=$str<br>\n"); } echo("</body>\n"); echo("</html>\n"); ?>

noname#45976
質問者

お礼

うーん、私もこれ(mb_convert_kana)はやってみたのですが、ダメな時がたまにあって、、、^^; どうしてなんでしょう、、、 ダメな時、というのは最初から(受け取ったときに)化けている場合、のようです^^; >「hiddenで全角文字をダミー送信」のおまじないをして >いるPHP3のプログラムを見たことがあります。 >でも、4.0.6ではそんなことを意識しなくてもよいと >思っていたのですが間違いなのでしょうか? おおお!?やはり既存の方法だったのですね~^^; 不具合はないのかちょっと心配です、、、(今のところ大丈夫そうですが) どなたか詳しい方~~!ぜひご教授ください~!m(_ _)m tomomo0325さん、回答くださってありがとう!^^

  • natural
  • ベストアンサー率37% (419/1115)
回答No.2

お礼&補足有り難うございます。 >「ページを読み込んで最初の送信で文字化けし、戻って再送信すると直る」という現象が起きています。>< なるほど、不可思議ですね~。(^_^; これに関してはPHPをご存じの方でないと解らないと思いますので、他の方の回答に期待しましょう。 さて、的外れかもしれませんが、もう2,3心当たりを挙げてみたいと思います。 >ちなみに実際は、受け取った後、半角だったら全角に変換して使用する、というソースにしています。 ということですが、一度test.phpの最初に変数KANAに対して無条件で変換関数を使用してみて頂けますか? h2zの場合、半角カナ以外の部分には全く影響を及ぼさないのでこのような使い方をしても問題ないのですが、そうでない場合は結構です。 もう一点です。 h2z_xxxは実際にはh2z_sjisやh2z_jis、h2z_eucといった形で使用されます。 もしもPHPの関数にも文字コードによる使い分けがあれば、他のコードで一度お試し下さい。 何れも的外れの場合はご容赦を。(^_^; #「補足入力のみだと回答を強要しているようで」→大丈夫、そんなことはありませんよ。(^_^)

noname#45976
質問者

お礼

再度回答ありがとうございます!!^^ >一度test.phpの最初に変数KANAに対して無条件で変換関数を使用してみて頂けますか やってみたのですが、やはり最初から化けている(しかも漢字になっている)ため変換もうまく行きませんでした。 でもいろいろ考えてくださってどうもありがとうございます^^ 実は!ある方法で解決いたしました!^^; 半角カナをinputタグで送るとき、一緒にhiddenででも全角文字をダミー送信するだけで、文字化けが回避できました!(なぜに!?^^; というわけで、その解決方法に異議あり!という方のために、もう少し回答受付中に(しつこい^^;)しておきます。 >#「補足入力のみだと回答を強要しているようで」→大丈夫、そんなことはありませんよ。(^_^) 重ね重ねどうもありがとうです(*^^*) 質問締め切りの際は、ぜひポイントをもらってくださいね^^

  • natural
  • ベストアンサー率37% (419/1115)
回答No.1

私はPerlでCGIを作成していますので、この場合の具体的な解決方法は提示出来ませんがご容赦下さい。 Perlの場合も先頭からの半角カナは文字化けを起こします。 半角カナを送る限り回避のしようがありません。 ですので、Perlの関数を用いてテキスト中の半角カナのみを全て全角カナに変換します。 こうすれば勿論文字化けは防げますよね。 問題はPHPにPerlでいうところのh2z_xxx(半角カナ→全角カナに変換する関数。xxxは文字コードを指定。)があるかどうかです。 これに該当する機能があるのであれば、全角カナに変換する方法が確実だと思います。 #念のため、h2z_xxxはjcode.plという日本語ライブラリに用意されている関数です。

noname#45976
質問者

お礼

補足入力のみだと回答を強要しているようでなんなので、完結的にお礼を、、、^^; この問題についてはまだしばらく受け付け中にしていますが、私のほうでもいろいろまた試してみます。 お答え頂きありがとうございました^^

noname#45976
質問者

補足

アドバイスありがとうございます。^^ >先頭からの半角カナは文字化け 説明が不十分ですみません^^; 「ページを読み込んで最初の送信で文字化けし、戻って再送信すると直る」という現象が起きています。>< >Perlの関数を用いてテキスト中の半角カナのみを全て全角カナに変換 はい^^ PHPにもその関数が存在します。 ちなみに実際は、受け取った後、半角だったら全角に変換して使用する、というソースにしています。 しかし、今の現象では次のページで受け取ったときにすでに化けていてどうしようもないんです~>< たとえば、「カン」と半角カナで入力すると、次のページでは「菌」になって入ってきます^^; やはり、半角カナは使うな~!で終わらせるしかないのでしょうか、、、^^; とりあえず今の私の環境は以下です。 IE version4.72 Netscape(R) Communicator 4.73 PHP version4.06

関連するQ&A