【问题标题】:PHP combine parse_str with trim or any other sanitize filterPHP 将 parse_str 与 trim 或任何其他清理过滤器结合使用
【发布时间】:2015-01-17 06:33:08
【问题描述】:

我需要在使用parse_str 函数时修剪或清理文本。

我尝试了这个,但实际上并没有修剪文本:

parse_str(trim($_REQUEST['data']), $v); 

例如,我得到以下结果: - 通过" " 我得到" " 而不是""; - 通过" a " 我得到" a " 而不是"a"

【问题讨论】:

  • “实际上没有修剪”是什么意思?你能分享一个例子吗?
  • 当然,如果我传递一个由 3 个空格组成的字符串,我会得到“”,但我应该得到“”。与“a”相同,我得到“a”而不是“a”。
  • @JayBlanchard 不,包含字符的字符串也会发生同样的情况。无论如何,如果我 echo trim(" ") 我按预期得到“”。
  • 那么肯定有其他事情发生,数据中我们没有看到的事情。我刚刚在 PHP fiddle 中对此进行了测试,效果很好。
  • $_REQUEST['data'] 中有什么内容?

标签: php trim sanitization


【解决方案1】:

试试这个:

parse_str($_REQUEST['data'], $v);
$v = array_map('trim', $v);

如果您想从查询字符串中的每个元素中删除空格,请先将您的查询字符串转换为带有parse_str() 的数组,然后是trim() 该数组的每个结果元素。

编辑

根据您上面的一个 cmets,您可能正在寻找比 trim() 更彻底的东西。如果是这种情况,您可以定义自己的“清理”函数并将其与array_map() 一起使用,而不是“修剪”:

function sanitize($input)
{
    return trim(str_replace(' ', '', $input));
}

parse_str($_REQUEST['data'], $v);
$v = array_map('sanitize', $v);

【讨论】:

  • 用你的代码我得到Warning: array_map(): Argument #2 should be an array$_REQUEST['data'] 不是数组。
  • @Mariano 你的$_REQUEST['data'] 是什么样的?
  • @Mariano 已修复,请再试一次。
  • @mopo922 我要试试。 $_REQUEST['data']是一个ajax函数序列化的表单,所以看起来是这样的:var1=a&var2=aa&var3=aaa
  • @mopo922 谢谢,用你更新的代码(第一个)它可以解决问题! :)
猜你喜欢
  • 2020-08-19
  • 2017-09-01
  • 2016-04-07
  • 2020-05-10
  • 2015-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
相关资源
最近更新 更多