Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

filter拡張モジュール

PHP5.2.0からfilter拡張モジュールが追加され、デフォルトでコンパイルされるようになっています。で、以前試したバージョン0.9.4から関数名や定数名、使い方が変わっているようなので、ざっくり試してみました。
以下のコードで確認できると思います。5.2.0RC5で動作確認しています。なお、INPUT_GETをINPUT_POSTやINPUT_COOKIEに置き換えても使えます。

<?php
/**
 * 指定した型の変数が存在するかどうかを調べ、存在すればその値を返す。
 * 存在しない場合、falseを返す。新規追加?
 */
var_dump(filter_input(INPUT_GET, 'b'));
echo '<hr>';

/**
 * 指定した型の変数が存在するかどうかを調べ、true/falseを返す
 * @see input_has_variable
 */
var_dump(filter_has_var(INPUT_POST, 'b'));
echo '<hr>';

/**
 * PHP の外部から変数を受け取り、オプションでそれをフィルタリングする
 * @see input_get
 */
echo '<pre>';
var_dump(filter_input_array(INPUT_GET));
echo '</pre>';
echo '<hr>';

/**
 * 指定したフィルタでデータをフィルタリングする
 * @see filter_data
 */
echo '<pre>';
var_dump(filter_var($_GET['a'], FILTER_VALIDATE_INT));
var_dump(filter_var($_GET['b'], FILTER_VALIDATE_INT));
echo '</pre>';
echo '<hr>';

/**
 * PHP の外部から複数の変数を受け取り、オプションでそれらを
 *フィルタリングする
 * @see input_get_args
 */
$data = array(
    'product_id'    => 'libgd<script>',
    'component'     => '10',
    'versions'      => '2.0.33',
    'testscalar'    => array('2', '23', '10', '12'),
    'testarray'     => '2',
);
$args = array(
    'product_id'   => FILTER_SANITIZE_ENCODED,
    'component'    => array('filter'    => FILTER_VALIDATE_INT,
                            'flags'     => FILTER_REQUIRE_ARRAY, 
                            'options'   => array('min_range' => 1, 'max_range' => 10)
                           ),
    'versions'     => FILTER_SANITIZE_ENCODED,
    'doesnotexist' => FILTER_VALIDATE_INT,
    'testscalar'   => array(
                            'filter' => FILTER_VALIDATE_INT,
                            'flags'  => FILTER_REQUIRE_SCALAR,
                           ),
    'testarray'    => array(
                            'filter' => FILTER_VALIDATE_INT,
                            'flags'  => FILTER_REQUIRE_ARRAY,
                           )

);
echo '<pre>';
var_dump(filter_var_array($data, $args));
echo '</pre>';
echo '<hr>';

/**
 * サポートされるフィルタの一覧を返す
 * @see input_filters_list
 */
echo '<pre>';
var_dump(filter_list());
echo '</pre>';
echo '<hr>';

/**
 * フィルタの名前からフィルタ ID を返す
 * @see input_name_to_filter
 */
var_dump(filter_id('int'));
?>
<hr>
<a href="?a[]=a&a[]=1&b=2">link</a>
<form action="filter03.php" method="post">
<input type="hidden" name="a[]" value="a">
<input type="hidden" name="a[]" value="1">
<input type="hidden" name="b" value="2">
<input type="submit" value="うりゃ!">
</form>