我见过很多处理表单输入的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'));
我的问题是:
发布于 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数组相同,不同之处在于您不必引用字符串键。
可以这样创建多维数组吗?
可以,停那儿吧。
发布于 2010-12-28 11:52:46
据我所知,这是一种在内部查看(和解析)通过带有[]
后缀的表单(GET/POST)传递的元素,并将它们解释为元素数组的机制。HTTP协议并不关心,它只在查询字符串中传递元素的名称及其关联值。
从我记事起,它就是一个普通的编程工具(我想我甚至记得它更常用于多文件上传,当你有"add file“链接将另一个元素附加到表单时,使用与前一个相同的名称(带有[]
) )。
在PHP中应用的相同规则也适用于表单。您可以使用[]
自动索引元素(对于通用列表),或者使用元素ID显式列出它们(例如file1、file2等(遵循我前面的示例))。
是的,可以使用多维数组。
要了解更多信息,请查看PHP自己的_POST documentation (特别是评论)。
发布于 2010-12-28 11:49:59
foo
或bar[baz]
只是news[title]
+ news[body]
https://stackoverflow.com/questions/4543500
复制相似问题