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 ]] )

と書きます。

  1. type INPUT_GET、INPUT_POST、 INPUT_COOKIE、INPUT_SERVER あるいは INPUT_ENV のいずれか。
  2. variable_name 変数名
  3. filter filterID
  4. option その他のオプション
    マニュアル
  5. 除去フィルタ
  6. フィルタフラグ

色々入れてみる。

コード

送る側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がはいってると思ってください。

文字列(日本語)を入れてみる

文字列(英語)を入れてみる

文字列(Email)を入れてみる

文字列(URL)を入れてみる

自然数を入れてみる

整数値(マイナス)を入れてみる

浮動小数点を入れてみる

URLにクエリを入れてみる。

最終更新:2015年06月07日 22:11