一尘不染

表单输入字段名称包含方括号,例如field [index]

php

我看过很多处理表单输入的PHP代码,其中输入字段名称包含方括号。我知道当PHP脚本检查$ _POST变量时,这会以某种方式导致PHP数组。

HTML示例:

<form action='http://zzz.com' method='post'>
    <input name='fruit[1]' value='apple' />
    <input name='fruit[2]' value='banana' />
</form>

范例网址:

http://zzz.com?fruit[1]=apple&fruit[2]=banana

示例PHP:

assert($_POST['fruit'] === array(1=>'apple', 2=>'banana'));

我对此的疑问:

  • 其背后的机制是什么?这些包含方括号的名称在什么时候转换为数组?这是HTTP协议的功能吗?Web服务器?PHP语言的?

  • 继续前面的问题,这是常用的黑客工具还是普通的编程工具?

  • 在输入字段名称中使用括号的规则(全部)是什么?

  • 可以通过这种方式创建多维数组吗?


阅读 829

收藏
2020-05-29

共1个答案

一尘不染

背后的机制是什么?在什么时候这个仅包含方括号的名称将转换为数组?这是HTPP协议的功能吗?Web服务器?是PHP语言吗?

这是PHP语言的功能。实际上,HTTP协议并不禁止使用多个相同的GET / POST参数。根据HTTP规范,以下内容:

foo=bar&foo=baz

不应导致foo == baz。这是两个具有两个不同值的参数。但是,PHP会foo用最新的结果()覆盖前者$_POST['foo'] == 'baz',即使它们可以单独解析也是如此。

继续前面的问题,这是常用的黑客工具还是普通的编程工具?

这取决于观点。在PHP世界中,这是完全正常的,因为该语言不使用括号不支持指定相同名称的多个参数[]。在HTTP世界中,foo != foo[]

在输入字段名称中使用方括号的(全部)规则是什么?

与PHP数组相同,除了不必引用字符串键。

可以通过这种方式创建多维数组吗?

是的你可以。

2020-05-29