2012-10-04 61 views
4

嘗試將閉包傳遞給filter_var_array(),但似乎無法使其工作。php FILTER_CALLBACK with closure

$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)); 

任何想法?

+0

*(阿里納斯)*您可以在'$ _POST'傳遞一個新的數組 – Gordon

+2

@Gordon從包裹它的字段,而不是直接:其實這是造成問題。 – hakre

+0

我強烈建議您閱讀手冊中給出的示例:http://php.net/manual/en/function.filter-var-array.php - 應使用法更清晰。 – hakre

回答

3

您傳遞的值不是$_POST,因此不會觸發回調。只需傳入整個$_POST陣列即可,例如

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

哈,我知道我必須犯一些笨蛋錯誤。感謝大家。在發佈之前,我應該遠離代碼幾分鐘。 – jbarreiros

1

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