【问题标题】:Alter $_GET $_POST using array_map使用 array_map 更改 $_GET $_POST
【发布时间】:2013-06-18 11:09:19
【问题描述】:

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

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

【问题讨论】:

  • $_GET[] 正在隐式创建索引。

标签: php arrays get array-map


【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      相关资源
      最近更新 更多