2016-05-30 54 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]); 
}