使用array_map更改$ _GET $ _POST

时间:2013-06-18 11:09:20

标签: php arrays get array-map

我要为$ _GET和$ _POST构建简单的过滤函数。这是我的代码。

array_map('clean', $_GET);

function clean($el)
{
  $_GET[] = strip_tags($el);
}

var_dump($_GET);

// result
1 => 'One',
2 => 'Two'

// expected
'first' = 'One'
'second' = 'Two'

如何为键和值保持相同的结构?``

2 个答案:

答案 0 :(得分:3)

array_map的回调需要返回值。 array_map将为数组中的每个值调用回调,并将其替换为返回的值。您不会在回调中更改数组本身。

$_GET = array_map('clean', $_GET);

function clean($el) {
    return strip_tags($el);
}

var_dump($_GET);

但实际上,由于strip_tags已经接受一个参数并返回一个值,所以这将做同样的事情:

$_GET = array_map('strip_tags', $_GET);

但实际上,对所有传入值的毯子strip_tags是一个坏主意,并没有真正解决大多数问题。您需要单独转义/清理每个值,具体取决于它是什么以及它的用途。请参阅The Great Escapism (Or: What You Need To Know To Work With Text Within Text)

答案 1 :(得分:2)

您滥用array_map。你应该在这里覆盖$_GET。并且array_map期望回调返回新数组的元素(对于此键)。

$_GET = array_map('clean', $_GET);

function clean($el)
{
     return strip_tags($el);
}