首页 文章

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

提问于
浏览
19

我已经看到很多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协议的一个特性吗?网络服务器? PHP语言?

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

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

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

3 回答

  • 3

    背后的机制是什么?此时仅包含括号的名称将转换为数组?这是HTPP协议的一个特性吗?网络服务器? PHP语言?>

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

    foo=bar&foo=baz
    

    不应该导致 foo == baz . 这是两个具有两个不同值的参数 . 但是,PHP会用最新的覆盖前 foo ,导致 $_POST['foo'] == 'baz' ,即使它们可以单独解析 .

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

    这取决于观点 . 在PHP世界中,这是完全正常的,因为语言不支持使用同名的多个参数的规范而不使用括号 [] . 但是在HTTP世界中, foo != foo[] .

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

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

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

    是的你可以 .

  • 5

    据我所知,这是PHP内部查看(和解析)通过表单(GET / POST)传递的元素与 [] 后缀并将它们解释为元素数组的机制 . HTTP协议不具有查询字符串中与其关联的值的名称 .

    早在我记忆中它就是一个普通的编程工具(我想我甚至记得它更常用于多文件上传,当你有一个"add file"链接将另一个元素附加到表单时,使用相同的名称(使用 [] )像往前一样 . )

    适用于PHP的相同规则适用于表单 . 您可以使用 [] 自动索引元素(对于通用列表)或使用元素ID(例如文件[1],文件[2]等)明确列出它们(按照我之前的示例))

    是的,可以使用多维数组 .

    有关更多信息,请查看PHP自己的_POST documentation(特别是评论)

  • 13
    • 这完全是php语言功能 . HTTP对数组一无所知 . 在http中 foobar[baz] 只是变量的名称

    • 这是正常做法

    • 在方便的时候使用它们 . 例如:对属于一个实体的多个字段进行分组,例如 news[title] news[body]

    • 是的 . TIAS

相关问题