忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/11/22 17:33 |
PHP5.3 Filter関数
PHPの関数リファレンスを見ていると、見たことも聞いたこともない関数がよく出てきます。
今回の生贄はこちら、Filter

filter_var()こそ入力値検証として使っている人がみつかりますが、他の関数については一体何のために存在するのかわかりませんし使っている人も見あたりません。
http://d.hatena.ne.jp/moriyoshi/20090319/1237486066
http://d.hatena.ne.jp/koyhoge/20110822/llplanets
誰かfilter_id()の有効な使い方を教えてください。
つうかマニュアルのコピペサイト邪魔すぎる。
<?php
	//$_GET['hoge']が存在するかチェック
	$filterHasVar = filter_has_var(INPUT_GET, 'hoge');
	//$_GET['hoge']から数値と+-以外を削除
	$filterVar = filter_var($_GET['hoge'], FILTER_SANITIZE_NUMBER_INT);
	//$_GET['hoge']が1から100までの整数値かチェック
	$filterInput = filter_input(
		INPUT_GET, 'hoge', FILTER_VALIDATE_INT, array(
			'options'=> array('min_range'=>1, 'max_range'=>100),
			'flags'=> FILTER_FLAG_ALLOW_OCTAL | FILTER_FLAG_ALLOW_HEX
		)
	);
filter_input()はfilter_has_var()とfilter_var()を合わせたような関数で、第一引数と第二引数はfilter_has_var()のもの、第三引数と第四引数はfilter_var()のものと思えばいいです。
ていうかfilter_input()の第4引数の詳しい使い方はfilter_var()のほうにしか載っていません。

ややこしいのが、フィルタに与える値によって処理内容が全く変わってくるところです。
上記filter_var()の例ではFILTER_SANITIZE_NUMBER_INTを与ますが、この引数は単純に数値以外の文字が削除されます。
「?hoge=0x99」としたらfalseでも0でもなく、「099」が返ります。

これをFILTER_VALIDATE_INTにすると、"0x99"が数値形式か否かをチェックしてfalseが返ってくるようになります。

FILTER_VALIDATE_INTのオプションにさらにFILTER_FLAG_ALLOW_HEXを与えると、今度は16進数形式の数値も許されるようになり、「153」が返ってきます。

上記filter_input()の例ではFILTER_VALIDATE_INT、FILTER_FLAG_ALLOW_HEXに加えてさらに、整数値の範囲1から100を追加しています。
"0x99"は153になり100を超えるので、falseが返ります。

使い慣れれば便利なのかもしれませんが、なんかどうにも使い方が疲れる関数です。
PR


2011/12/12 22:00 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<Minecraft 1.8.1 IndustrialCraft2 工業用ダイヤモンド・植物性ダイヤモンドを作る | HOME | 買ったものリスト 2011/12/11>>
忍者ブログ[PR]