アプリ版:「スタンプのみでお礼する」機能のリリースについて

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;
}



以上、宜しくお願いいたします。

A 回答 (4件)

>ソを入力した場合


>$len = 3
>$mblen = 4
>

値的には0x5cコードがエスケープされてるような文字数ですね。

以下を表示させたらどんな値か見たいところです。
$array = unpack('H*dump', $_POST['name3']);
echo $array['dump'];

実際に読み込んでる設定ファイルを
# php --ini

# php -i | grep ini
などで再度確認した方がいいかと思います。
    • good
    • 0

もし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";
}
?>
    • good
    • 0

手元の環境でシフトJISを使ってコマンドライン実行したら問題なくできました。



具体的に$mblen の値はいつくになっていますか?
もし2以外なら別の文字コードで送信されてきている可能性があるのと、
magic_quotes_gpc が On 設定なら Off に変更すればできると思います。
    • good
    • 0
この回答へのお礼

アを入力した場合
$len = 2
$mblen = 2

ソを入力した場合
$len = 3
$mblen = 4

となります。

php.iniの magic_quotes_gpc は
off になっていました。


以上、宜しくお願いいたします。

お礼日時:2012/03/07 16:10

シフトJISを使っているからでしょう。


UTF-8にすれば動作すると思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/03/06 15:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!