PHPでfilter_input関数を使い色々なものをフィルタリングしていきたいと思います。6月7日記事
目次
ユーザに入力された文字列をフィルターを通して、どうフィルターできたのか表示させるプログラムを使ってみる。
confirm.php・・・POST受け取る側のファイル
<!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="utf-8"> <title>フォーム</title> </head> <body> <?php //$text = $_POST["text"]; こういうのはなくてもいいです。 echo "FILTER_SANITIZE_STRING<br>"; $text0 = (string)filter_input(INPUT_POST,'text',FILTER_SANITIZE_STRING);/*ここのみ記入*/ echo $text0."<br><br>";
受け取る側(confirm.php側)で、下から2行目のみを書いていけばフィルタができます。
フィルターの書き方は、
(string)filter_input
という書き方と
filter_input
という書き方があります。明示的に書きたい場合は(string)と記入しましょう。 文法的にいうと、
filter_input ( int $type , string $variable_name [, int $filter = FILTER_DEFAULT [, mixed $options ]] )
と書きます。
送る側form.php
<!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="utf-8"> <title>フォーム</title> </head> <body> <form action="confirm.php" method="post"> <dl> <dt>タイトル</dt> <dd><input type="text" name="text"></dd> <dt>内容</dt> <dd><textarea name="contents" cols="30" rows="4"></textarea></dd> <input type="submit" name="submit" value="確認"> </form> </body> </html>
受け取る側confirm.php
<!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="utf-8"> <title>フォーム</title> </head> <body> <?php //$text = $_POST["text"]; こういうのはなくてもいいです。 echo "FILTER_SANITIZE_EMAIL・・・英字、数字および !#$%&'*+-/=?^_`{|}~@.[] 以外のすべての文字を取り除きます。 <br>"; $text0 = (string)filter_input(INPUT_POST,'text',FILTER_SANITIZE_EMAIL); echo $text0."<br><br>"; echo "FILTER_SANITIZE_ENCODED・・・文字列を URL エンコードします。<br>"; $text1 = (string)filter_input(INPUT_POST,'text',FILTER_SANITIZE_ENCODED); echo $text1."<br><br>"; echo "FILTER_SANITIZE_MAGIC_QUOTES・・・シングルクオーテーションとダブルクオーテーションの前にバックスラッシュを付ける。<br>"; $text2 = (string)filter_input(INPUT_POST,'text',FILTER_SANITIZE_MAGIC_QUOTES); echo $text2."<br><br>"; echo "FILTER_SANITIZE_NUMBER_FLOAT・・・数字、+- および オプションで .,eE 以外のすべての文字を取り除きます。 <br>"; $text3 = (string)filter_input(INPUT_POST,'text',FILTER_SANITIZE_NUMBER_FLOAT); echo $text3."<br><br>"; echo "FILTER_SANITIZE_NUMBER_INT・・・数字、プラス記号、マイナス記号 以外のすべての文字を取り除きます。<br>"; $text4 = (string)filter_input(INPUT_POST,'text',FILTER_SANITIZE_NUMBER_INT); echo $text4."<br><br>"; echo "FILTER_SANITIZE_SPECIAL_CHARS・・・htmlspecialchars+ENT_QUOTESと同じこと<br>"; $text5 = (string)filter_input(INPUT_POST,'text',FILTER_SANITIZE_SPECIAL_CHARS); echo $text5."<br><br>"; echo "FILTER_SANITIZE_FULL_SPECIAL_CHARS・・・タグとダブルクオーテーションをエスケープ<br>"; $text6 = (string)filter_input(INPUT_POST,'text',FILTER_SANITIZE_FULL_SPECIAL_CHARS); echo $text6."<br><br>"; echo "FILTER_SANITIZE_STRING・・・タグを取り除きます。<br>"; $text7 = (string)filter_input(INPUT_POST,'text',FILTER_SANITIZE_STRING); echo $text7."<br><br>"; echo "FILTER_SANITIZE_URL・・・特殊文字等をエスケープ <br>"; $text8 = (string)filter_input(INPUT_POST,'text',FILTER_SANITIZE_URL); echo $text8."<br><br>"; echo "検証フィルタ<br>"; echo "FILTER_VALIDATE_URL,FILTER_FLAG_PATH_REQUIRED・・・URL で、パス部分を必須とします。 <br>"; $text9 = (string)filter_input(INPUT_POST,'text',FILTER_VALIDATE_URL,FILTER_FLAG_PATH_REQUIRED); echo $text9."<br><br>"; echo "FILTER_VALIDATE_URL,FILTER_FLAG_QUERY_REQUIRED・・・URL で、クエリ文字列を必須とします。 <br>"; $text10 = (string)filter_input(INPUT_POST,'text',FILTER_VALIDATE_URL,FILTER_FLAG_QUERY_REQUIRED); echo $text10."<br><br>"; ?> </body> </html>
除去された場合はNULLを返します。NULLを返すと何も表示されないので、何も表示されない箇所はNULLがはいってると思ってください。