Ruby on rails 接受Rails中名称中带有方括号的表单字段

Ruby on rails 接受Rails中名称中带有方括号的表单字段,ruby-on-rails,arrays,forms,escaping,square-bracket,Ruby On Rails,Arrays,Forms,Escaping,Square Bracket,在Rails应用程序中,我遇到了一种情况,我希望有一个以方括号结尾的复选框名称,例如: name="foo[bar][baz[]]" 其他特殊字符似乎处理正确,但Rails似乎去掉了方括号,将其视为声明数组,而不是名称的一部分。需要做什么才能允许此名称中的任意字符(特别是括号)并让Rails正确处理它们?这是因为规范中不允许使用方括号: ID和名称标记必须以字母([a-Za-z])开头,并且可以是 后跟任意数量的字母、数字([0-9])、连字符(“-”), 下划线(“”)、冒号(“:”)和句点

在Rails应用程序中,我遇到了一种情况,我希望有一个以方括号结尾的复选框名称,例如:

name="foo[bar][baz[]]"

其他特殊字符似乎处理正确,但Rails似乎去掉了方括号,将其视为声明数组,而不是名称的一部分。需要做什么才能允许此名称中的任意字符(特别是括号)并让Rails正确处理它们?

这是因为规范中不允许使用方括号:

ID和名称标记必须以字母([a-Za-z])开头,并且可以是 后跟任意数量的字母、数字([0-9])、连字符(“-”), 下划线(“”)、冒号(“:”)和句点(“.”)

关于Rails部分,并结合这两个答案(和):


Rails使用方括号在参数散列中建立关联,因此您不应该混淆这些名称。

这是因为规范中不允许使用方括号:

ID和名称标记必须以字母([a-Za-z])开头,并且可以是 后跟任意数量的字母、数字([0-9])、连字符(“-”), 下划线(“”)、冒号(“:”)和句点(“.”)

关于Rails部分,并结合这两个答案(和):


Rails使用方括号在params散列中建立关联,因此您不应该弄乱这些名称。

如果您确实需要,您可以
CGI.escape
自动解析不需要的值。然后您必须
CGI.unescape

“foo[bar][{CGI.escape(name)}”
CGI.unescape(参数[:foo][:bar])

如果确实需要,可以
CGI.escape
自动解析不需要的值。然后您必须
CGI.unescape

“foo[bar][{CGI.escape(name)}”
CGI.unescape(参数[:foo][:bar])

我使用的是HTML5,我认为它更为宽容。Rails已经使用括号作为框架的一部分(如果它违反了规范,这很有趣)。一组复选框的描述(几乎)与OP所写的一模一样。好吧,经过反复的讨论后,你的答案完全可以了,投了赞成票。我使用的是HTML5,我认为它更为宽容。Rails已经使用括号作为框架的一部分(如果它违反了规范,这很有趣)。一组复选框的描述(几乎)与OP所写的一模一样。好的,来回几次后,您的答案完全正确,请向上投票。如果您想将一组元素分配给变量,您需要查找
name=“foo[bar][baz][]”
你能再解释一下你想做什么吗?我试图支持复选框名称中的所有字符(我想除了空格以外,HTML5规范禁止使用空格)。我注意到,当我尝试命名一个
baz[]
时,由于Rails关于方括号的逻辑,它没有得到正确处理。我想知道是否有办法转义括号(和其他特殊字符?),以便它们正确通过。否。不要告诉我你的编程解决方案,因为它显然是错误的。向我展示代码,并用简单的文字解释您试图获得的结果。代码是
。我希望
params
包含
{“bar”=>{“baz[]”=>“1”}
foo
键。相反,该键的值是
{“bar”=>{“baz”=>[nil]}
。如果您想将一组元素分配给变量,您需要查找
name=“foo[bar][baz][”
您能解释一下您想做什么吗?我正在尝试支持所有字符(我想除了HTML5规范禁止的空格之外)在复选框的名称中。我注意到,当我尝试命名一个
baz[]
时,由于Rails关于方括号的逻辑,它没有得到正确处理。我想知道是否有办法转义方括号(和其他特殊字符?)不要告诉我你的编程解决方案,因为它显然是错误的。给我看代码,用简单的话解释你想要得到的结果。代码是
。我希望
params
包含
foo
{“bar”=>{“baz[]”=>“1”}
。相反,该键的值是
{“bar”=>{“baz”=>[nil]}