PHPのデータフィルタリング

ユーザー入力データをフィルタリングするときは、通常、メールボックスを確認するときに正規表現を使用するなど、判断する自己記述型の方法です。

$pattern = "/\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/";
if (!preg_match($pattern, $email)) {
        throw new \Exception(self::ERROR_PARAMETER_EMPTY . '_邮件格式有误:' . $email);
}

規則性がない場合は、他の簡単な方法がありますか?

フィルタ関連の関数を使用する

Filter_has_var(type、variable)指定された型の変数があるかどうか。
Filter_inputはスクリプトの外部からの入力を受け取り、それをフィルタリングします。
Filter_input_arrayは、スクリプトの外部から複数の入力を受け取り、フィルタリングします。
Filter_varは変数をとり、それをフィルタリングします。
Filter_var_arrayは複数の変数を取得し、それらをフィルタリングします。

Filter_has_var

$ _GETの結果に名前が含まれているかどうかを判断する

if(!filter_has_var(INPUT_GET, "name"))
{
    echo("name 不存在");
}
else
{
    echo("name 存在");
}

Filter_input

メールボックスの確認の例を参照してください。

if (!filter_input(INPUT_GET, 'email', FILTER_VALIDATE_EMAIL))
{
    echo "E-Mail is not valid";
}
else
{
    echo "E-Mail is valid";
}

Filter_input_array

入力ソース全体をフィルタリングする

$filters = array
(
    "name" => array
    (
        "filter"=>FILTER_CALLBACK,
        "flags"=>FILTER_FORCE_ARRAY,
        "options"=>"ucwords"
    ),
    "age" => array
    (
        "filter"=>FILTER_VALIDATE_INT,
        "options"=>array
        (
            "min_range"=>1,
            "max_range"=>120
        )
    ),
    "email"=> FILTER_VALIDATE_EMAIL,
);
print_r(filter_input_array(INPUT_POST, $filters));

Filter_var、filter_var_array

ソースを入力したり、値を直接フィルタリングしたりする必要はありません

if(!filter_var("[email protected]", FILTER_VALIDATE_EMAIL))
 {
 echo("E-mail is not valid");
 }
else
 {
 echo("E-mail is valid");
 }

入力ソースの範囲

確認

その他のフィルタリング方法

Strip_tagsはhtmlタグを削除します
Htmentitiesは、文字をHTMLエンティティに変換します(また、ユーロポンド、著作権シンボルなどの通貨記号もヘクス化します)
htmlspecialchars関数は、定義済みの文字をHTMLエンティティに変換します。
定義済みの文字は次のとおりです。
&(および番号)は&
"(二重引用符)は"
'(一重引用符)は'
<(より小さい)は<
(より大きい)は>

*注:バック文字に特殊なHTMLエンティティについては、使用htmlspecialcharsdecode()関数。


$input = "<span>我是标题</span>";
echo htmlspecialchars($input) . "\n";
echo htmlentities($input) . "\n";
echo strip_tags($input) . "\n";

$input = "- 'select * from ";
echo addslashes($input) . "\n";

元のリンク