- ベストアンサー
入力フォームの文字規制
いつもお世話になっております。 フォームに入力してもらう際、;や、&、%、<などの文字を入力規制したいと考えているのですが、どのような関数を使えば宜しいのでしょうか? 文字数などは、if文の中で、mb_strlen($id) < 21 といった様に使っているのですが、利用して欲しくない文字を限定させることが出来ずにおります。今も6時間ほど格闘しているのですが…適切な関数を見つけ出せずにおります。 お手数お掛けいたしますが宜しくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
preg_match の場合 if(preg_match('/[;&%<]/',$text )){ #含まれている場合の処理 } てな感じで・・
その他の回答 (4)
- pokapoka1980
- ベストアンサー率41% (48/117)
間違い if ($n==0 || $n===false) return true; // $word文字は$inputdataない return false;// $word文字は$inputdataにある やっぱり下手か。。。
お礼
pokapoka1980様 はじめまして、こんにちは。 お忙しいなかお時間を割いていただいた様で有難う御座います。(時間を割くという意味では他の皆様も同様に感謝しておりますが…) 初心者なため、poka1980様のコードが理解出来る様で出来ないような、と言ったところが正直なところですが、理解を深めて改めてお返事いたします。有難う御座いました。
- pokapoka1980
- ベストアンサー率41% (48/117)
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;// 指定文字はない } みたいな関数を作って繰り返し行うとか。(下手糞すぎるか。。)
- galluda
- ベストアンサー率35% (440/1242)
がると申します。 「規制」の意味次第ではあるのですが。いずれも、正規表現系のライブラリがとりあえず直接的には有効かと。 もし「入力されたらエラーを出したい」のであれば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.html を使ってみるのも良いかもしれません。 ちなみに、JavaScriptによる制限はきわめて簡単に迂回が可能なので、あまりお勧めいたしません。
お礼
がる様 いつもお世話になっております! ご親切なアドバイスに感謝いたします。 と、先のBLUEPIXY様も、がる様同様、preg_matchをお勧めいただいたので、お教えいただいたサイトの内容を何度も読み直してはいるのですが、お恥ずかしいながらにも初心者の私には、私が設定したいと考えているスクリプトにあてがう事が出来ません。 試しにと、サンプルコードを記述してみたのですが、思うように行かないのが実情です。 引き続きアドバイスなど頂ければ幸いです。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
PHP5なら if(strpbrk($text, ';&%<')){ で あるいは、 ereg か preg_match を使うとか PHPでは、一度フォーム送信されてからしかチェックできないですよ。 入力の際にということであれば、javascript を使うことになると思います。
お礼
BLUEPIXY様 はじめまして、こんにちは。 夜遅くの回答を有難う御座います。 >if(strpbrk($text, ';&%<')){ これか!と思ったのですが、私が使っているのはPHP4なんです。。こういったところにもバージョンの違いが出てくるのですね。 >ereg か preg_match を使うとか こちらも調べては見ましたが、質問に書いた、 mb_strlen($id) < 21というのは、フォームに入力した文字数が21以下だったら、といったif文に記述しているのですが、お教えいただいた関数を調べたところ、どのように設定したら良いか分かりません…。
お礼
BLUEPIXY様 早速のお返事ありがとう御座います。 「どうなっているんだろう…」と、preg_matchに関するサイトを見ていましたが、これで解決いたしました。 BLUEPIXY様のお教え下さった内容は勿論、galluda様が教えて下さったサイトおよび対処法、そしてpokapoka1980様が記述して下さったスクリプトの理解を深めつつ、この場をお借りし今回の質問に対するお礼をお伝えできればと思います。 有難う御座いました!