2013-06-18 149 views
-3

我将为$ _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' 

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

+1

'$ _GET []'隐式创建索引。 – cmt

回答

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)

2

你滥用array_map。您应该在此覆盖$_GET。并且array_map预计回调将返回新数组的元素(对于此密钥)。

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

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