在get中查询参数中发送数组是一个hack吗?

时间:2016-09-01 05:32:57

标签: php arrays query-parameters paradigms

我听说它是​​在

等查询参数中传递数组的黑客攻击

http:site.com?a[]=5&a[]=6

我知道查询参数中的PHP支持数组,所以在服务器端你可以得到像

这样的东西
$_GET[a] = [5,6]

其他编程语言是否像PHP一样支持此功能?是不是以这种方式传递数组?如果是,那么在GET参数中传递数组的最佳做法是什么?

IMO:它的功能不是黑客仍然希望得到社区的意见

2 个答案:

答案 0 :(得分:1)

That's not a hack, it's an awesome feature!

I think people are saying this because it's ugly if your users see it in the URL.

What you can do is concat your data, then explode it server side.

http:site.com?a=5_6

explode('_', $a);

答案 1 :(得分:0)

  

在get?

中查询参数中发送数组是不是很糟糕?

这是application / x-www-form-urlencoded的非标准添加(首先没有明确定义),所以是的,它是一个黑客。

无论是聪明的黑客还是丑陋的黑客攻击,都在很大程度上是一种观点问题。有利有弊。

  

其他编程语言是否像PHP一样支持这个?

大多数语言都没有在这样的基础级别上进行HTTP处理。 PHP开始作为一个库来做CGI风格的事情并且它显示出来。您真的应该在这里查看用于处理表单数据而不是语言的库。

大多数都允许您在查询字符串中扩展重复键,而不要求名称包含[](这是冗长且难以阅读的)以使其起作用。这种情况的限制是您无法在数据中明确指定数组索引。

虽然有PHP风格的实现。 body-parser允许您在指定extended: true时使用该语法。 Perl的PHP::ParseStr实现了它,但没有将它与代码集成以从请求中提取字符串。

  

如果是,那么在GET参数中传递数组的最佳做法是什么?

如果您使用的是PHP,那么请使用PHP的语法。