- 締切済み
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; } 以上、宜しくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- t140
- ベストアンサー率39% (59/150)
>ソを入力した場合 >$len = 3 >$mblen = 4 > 値的には0x5cコードがエスケープされてるような文字数ですね。 以下を表示させたらどんな値か見たいところです。 $array = unpack('H*dump', $_POST['name3']); echo $array['dump']; 実際に読み込んでる設定ファイルを # php --ini や # php -i | grep ini などで再度確認した方がいいかと思います。
- yambejp
- ベストアンサー率51% (3827/7415)
もし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)
手元の環境でシフトJISを使ってコマンドライン実行したら問題なくできました。 具体的に$mblen の値はいつくになっていますか? もし2以外なら別の文字コードで送信されてきている可能性があるのと、 magic_quotes_gpc が On 設定なら Off に変更すればできると思います。
- memphis
- ベストアンサー率40% (975/2395)
シフトJISを使っているからでしょう。 UTF-8にすれば動作すると思います。
お礼
ありがとうございます。 シフトJISでは不可能なのでしょうか?
お礼
アを入力した場合 $len = 2 $mblen = 2 ソを入力した場合 $len = 3 $mblen = 4 となります。 php.iniの magic_quotes_gpc は off になっていました。 以上、宜しくお願いいたします。