dポイントプレゼントキャンペーン実施中!

いつもお世話になっております。
フォームに入力してもらう際、;や、&、%、<などの文字を入力規制したいと考えているのですが、どのような関数を使えば宜しいのでしょうか?

文字数などは、if文の中で、mb_strlen($id) < 21 といった様に使っているのですが、利用して欲しくない文字を限定させることが出来ずにおります。今も6時間ほど格闘しているのですが…適切な関数を見つけ出せずにおります。
お手数お掛けいたしますが宜しくお願い致します。

A 回答 (5件)

preg_match の場合


if(preg_match('/[;&%<]/',$text )){
#含まれている場合の処理
}
てな感じで・・
    • good
    • 0
この回答へのお礼

BLUEPIXY様

早速のお返事ありがとう御座います。
「どうなっているんだろう…」と、preg_matchに関するサイトを見ていましたが、これで解決いたしました。

BLUEPIXY様のお教え下さった内容は勿論、galluda様が教えて下さったサイトおよび対処法、そしてpokapoka1980様が記述して下さったスクリプトの理解を深めつつ、この場をお借りし今回の質問に対するお礼をお伝えできればと思います。

有難う御座いました!

お礼日時:2006/06/03 18:31

間違い


if ($n==0 || $n===false)
return true; // $word文字は$inputdataない
return false;// $word文字は$inputdataにある

やっぱり下手か。。。
    • good
    • 0
この回答へのお礼

pokapoka1980様

はじめまして、こんにちは。
お忙しいなかお時間を割いていただいた様で有難う御座います。(時間を割くという意味では他の皆様も同様に感謝しておりますが…)

初心者なため、poka1980様のコードが理解出来る様で出来ないような、と言ったところが正直なところですが、理解を深めて改めてお返事いたします。有難う御座いました。

お礼日時:2006/06/03 17:44

stripslashes(htmlspecialchars(入力データ)))では?



駄目なら、適当だけど
function Is_This_Word_NG($word,$inputdata)
{
$n=preg_match_all("/[$word]/",$inputdata,$result);
if ($n==0 || $n!==false)
return true; // 指定文字あり
return false;// 指定文字はない
}
みたいな関数を作って繰り返し行うとか。(下手糞すぎるか。。)
    • good
    • 0

がると申します。


「規制」の意味次第ではあるのですが。いずれも、正規表現系のライブラリがとりあえず直接的には有効かと。

もし「入力されたらエラーを出したい」のであればhttp://php.s3.to/man/function.preg-match.html
あたりが扱いやすいかと思います。
これで「使って欲しくない文字」を検索して、1文字でも引っかかってきたらエラーを出力、という感じでしょうか。

もし「入力されても出力時に適切に表示したい」のであれば、
http://php.s3.to/man/function.preg-replace.html
を使うか、あるいはもうちょっと雑にやるのであれば
http://php.s3.to/man/function.htmlspecialchars.h …
を使ってみるのも良いかもしれません。

ちなみに、JavaScriptによる制限はきわめて簡単に迂回が可能なので、あまりお勧めいたしません。
    • good
    • 0
この回答へのお礼

がる様

いつもお世話になっております!
ご親切なアドバイスに感謝いたします。

と、先のBLUEPIXY様も、がる様同様、preg_matchをお勧めいただいたので、お教えいただいたサイトの内容を何度も読み直してはいるのですが、お恥ずかしいながらにも初心者の私には、私が設定したいと考えているスクリプトにあてがう事が出来ません。
試しにと、サンプルコードを記述してみたのですが、思うように行かないのが実情です。
引き続きアドバイスなど頂ければ幸いです。

お礼日時:2006/06/03 17:38

PHP5なら


if(strpbrk($text, ';&%<')){

あるいは、
ereg か preg_match を使うとか

PHPでは、一度フォーム送信されてからしかチェックできないですよ。
入力の際にということであれば、javascript を使うことになると思います。
    • good
    • 0
この回答へのお礼

BLUEPIXY様

はじめまして、こんにちは。
夜遅くの回答を有難う御座います。

>if(strpbrk($text, ';&%<')){

これか!と思ったのですが、私が使っているのはPHP4なんです。。こういったところにもバージョンの違いが出てくるのですね。

>ereg か preg_match を使うとか

こちらも調べては見ましたが、質問に書いた、
mb_strlen($id) < 21というのは、フォームに入力した文字数が21以下だったら、といったif文に記述しているのですが、お教えいただいた関数を調べたところ、どのように設定したら良いか分かりません…。

お礼日時:2006/06/03 17:32

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