首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >包含方括号的表单输入字段名称,如field[index]

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

Stack Overflow用户
提问于 2010-12-28 11:39:19
回答 3查看 12.2K关注 0票数 25

我见过很多处理表单输入的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>

示例URL:

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

示例PHP:

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

我的问题是:

  • 它背后的机制是什么?在什么情况下,这些包含括号的名称会转换为数组?这是HTTP协议的一个特性吗?web服务器的数量?
  • 在输入字段名称中使用方括号的(所有)规则是什么?
  • 可以用这种方法创建多维数组吗?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-28 11:57:55

背后的机制是什么?在哪一点上,只包含括号的名称会被转换为数组?这是HTPP协议的一个特性吗?web服务器的数量?PHP language?>的

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

foo=bar&foo=baz

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

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

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

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

与PHP数组相同,不同之处在于您不必引用字符串键。

可以这样创建多维数组吗?

可以,停那儿吧。

票数 16
EN

Stack Overflow用户

发布于 2010-12-28 11:52:46

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

从我记事起,它就是一个普通的编程工具(我想我甚至记得它更常用于多文件上传,当你有"add file“链接将另一个元素附加到表单时,使用与前一个相同的名称(带有[]) )。

在PHP中应用的相同规则也适用于表单。您可以使用[]自动索引元素(对于通用列表),或者使用元素ID显式列出它们(例如file1、file2等(遵循我前面的示例))。

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

要了解更多信息,请查看PHP自己的_POST documentation (特别是评论)。

票数 5
EN

Stack Overflow用户

发布于 2010-12-28 11:49:59

  • 这完全是php语言的特性。HTTP对数组一无所知。在http中,foobar[baz]只是
  • 变量的一个名字,这是
  • 的一种正常做法,在你方便的时候使用它们。例如:对属于一个实体的多个字段进行分组,如news[title] + news[body]
  • Yes.TIAS
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4543500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档