6

クロージャーを filter_var_array() に渡そうとしていますが、機能していないようです。

$clean = function( $html ) {
    return HTML::sanitize( $html, array('p','ul','ol','li'), array('class','style') );
};
$args = array( 'filter' => FILTER_CALLBACK, 'options' => $clean );

$fields = filter_var_array(
    array( $_POST['field1'], $_POST['field2'], $_POST['field3'] ),
    array( 'field1' => $args, 'field2' => $args, 'field3' => $args )
);

上記を実行すると、$fields は空の配列になります。

個々のフィルタリングは正常に機能することに注意してください。

$field1= filter_var( $_POST['field1'], FILTER_CALLBACK, array( 'options' => $clean ) );

何か案は?

4

2 に答える 2

4

$_POSTキーなしで の値を渡しているため、コールバックはトリガーされません。$_POST代わりに配列全体を渡すだけです。

$fields = filter_var_array(
    $_POST,
    array(
        'field1' => $args, 
        'field2' => $args, 
        'field3' => $args 
    )
);
于 2012-10-04T16:51:29.073 に答える
2

filter_var_arrayフィルタリングするデータを含む文字列キーを持つ配列と、引数を定義する配列が必要です。有効なキーは変数名を含む文字列であり、有効な値はフィルタ タイプ、またはオプションでフィルタ、フラグ、およびオプションを指定する配列のいずれかです。

実装は次のようになります。

$clean = function ($html) {
    return HTML::sanitize($html, array('p','ul','ol','li'), array('class','style'));
};

$filter = array('filter' => FILTER_CALLBACK,'options' => $clean);
$args = array("field1" => $filter,"field2" => $filter,"field3" => $filter);
$fields = filter_var_array($_POST, $args);
于 2012-10-04T16:52:58.087 に答える