• 締切済み

PHPでの全角、半角判断について

PHP5にて、入力フォムから入力された文字を全角か半角か判断しています。 半角だとフラグを立ててエラーにしております。 しかし、「ソ」だけ全角で入力しても 半角と判断されてしまい困っております。 0x5c と関係していると思うのですが 対処方法がわかりません。 ご教示頂けると助かります。 //名前(性)フリガナ if($_POST['name3'] == ""){ echo "【名前(性)フリガナ】が未入力です。<BR>"; $errflg = 1; } $len = strlen($_POST['name3']); $mblen = mb_strlen($_POST['name3'], "Shift_JIS") * 2; if($len != $mblen){ $errflg = 1; } 以上、宜しくお願いいたします。

みんなの回答

  • t140
  • ベストアンサー率39% (59/150)
回答No.4

>ソを入力した場合 >$len = 3 >$mblen = 4 > 値的には0x5cコードがエスケープされてるような文字数ですね。 以下を表示させたらどんな値か見たいところです。 $array = unpack('H*dump', $_POST['name3']); echo $array['dump']; 実際に読み込んでる設定ファイルを # php --ini や # php -i | grep ini などで再度確認した方がいいかと思います。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

もしshift_jisが必須なら全角ひらがな・カタカナをダイレクトにチェックしてみては? <form method="post"> <input type="text" name="name3" value="セソタ"> <input type="submit" value="go"> </form> <?PHP $name3=isset($_POST["name3"])?$_POST["name3"]:""; $pattern="/^(\x82[\x9F-\xF1]|\x83[\x40-\x96])+$/"; if(preg_match($pattern,$name3)){ print "ok"; }else{ print "ng"; } ?>

  • t140
  • ベストアンサー率39% (59/150)
回答No.2

手元の環境でシフトJISを使ってコマンドライン実行したら問題なくできました。 具体的に$mblen の値はいつくになっていますか? もし2以外なら別の文字コードで送信されてきている可能性があるのと、 magic_quotes_gpc が On 設定なら Off に変更すればできると思います。

regal38
質問者

お礼

アを入力した場合 $len = 2 $mblen = 2 ソを入力した場合 $len = 3 $mblen = 4 となります。 php.iniの magic_quotes_gpc は off になっていました。 以上、宜しくお願いいたします。

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.1

シフトJISを使っているからでしょう。 UTF-8にすれば動作すると思います。

regal38
質問者

お礼

ありがとうございます。 シフトJISでは不可能なのでしょうか?