2016-05-30 51 views
4

我總是使用filter_var($ var,FILTER,FLAG);當我從$ _GET,$ _POST等獲得數據時,但現在這個數據是一個JSON字符串,但我沒有找到任何過濾器來消毒JSON。任何人都知道如何實現這個過濾器?使用php消毒JSON

PHP filter_var():http://php.net/manual/en/function.filter-var.php

PHP FILTER CONST:http://php.net/manual/en/filter.filters.sanitize.php

+0

你是怎麼得到json的? –

+1

[json_decode](http://php.net/manual/en/function.json-decode.php)如果json字符串無效,則返回null。然後你應該根據它們的內容(數字,電子郵件等)過濾var的包含屬性, – JimL

回答

6

第一解析JSON到一個PHP數組,然後作爲使用正請求的內容做陣列中的濾波器的每個值,可以映射JSON鍵到原理圖過濾器和標誌/選項例如

$filters = array(
    'email'=>FILTER_VALIDATE_EMAIL, 
    'url'=>FILTER_VALIDATE_URL, 
    'name'=>FILTER_SANITIZE_STRING, 
    'address'=>FILTER_SANITIZE_STRING 
); 
$options = array(
    'email'=>array(
     'flags'=>FILTER_NULL_ON_FAILURE 
    ), 
    'url'=>array(
     'flags'=>FILTER_NULL_ON_FAILURE 
    ), 
    //... and so on 
); 
$inputs = json_decode($your_json_data); 
$filtered = array(); 
foreach($inputs as $key=>$value) { 
    $filtered[$key] = filter_var($value, $filters[$key], $options[$key]); 
}