Ruby on rails RubyonRails 3表单中的snowman参数是用来做什么的?

Ruby on rails RubyonRails 3表单中的snowman参数是用来做什么的?,ruby-on-rails,forms,unicode,Ruby On Rails,Forms,Unicode,在RubyonRails3(目前使用Beta4)中,我看到当使用form\u标记或form\u作为助手时,有一个名为\u snowman的隐藏字段☃ (\x9731)出现 那么,这是为了什么呢?这是为了支持InternetExplorer 5并鼓励它用于表单 所看到的提交消息详细说明如下: 修复几个已知的web编码问题: 在所有窗体上指定accept字符集。所有最近的浏览器,以及 IE5+将使用指定的编码 表格参数 不幸的是,IE5+不会查看accept字符集,除非至少有一个 表单值中的字符不

在RubyonRails3(目前使用Beta4)中,我看到当使用
form\u标记
form\u作为
助手时,有一个名为
\u snowman
的隐藏字段☃ (\x9731)出现


那么,这是为了什么呢?

这是为了支持InternetExplorer 5并鼓励它用于表单

所看到的提交消息详细说明如下:

修复几个已知的web编码问题:

  • 在所有窗体上指定accept字符集。所有最近的浏览器,以及 IE5+将使用指定的编码 表格参数
  • 不幸的是,IE5+不会查看accept字符集,除非至少有一个 表单值中的字符不可用 在页面的字符集中。自从 用户可以覆盖默认值
    字符集(轨道设置为UTF-8), 我们提供了一个包含 unicode字符,强制IE 查看accept字符集
  • 现在绝大多数web输入都是UTF-8,我们设置了入站 UTF-8的参数。这将 消除许多不兼容的情况 ASCII-8BIT和
    UTF-8
  • 你可以放心地忽略params[:snowman]
简而言之,您可以安全地忽略此参数


不过,我不知道为什么我们要支持InternetExplorer5这样的老技术。如果你问我的话,这似乎是一个非常非RubyonRails的决定。

这个参数被添加到表单中,是为了强制InternetExplorer(5、6、7和8)将其参数编码为unicode

具体来说,如果用户将浏览器的编码切换为拉丁语-1,则可能会触发此错误。要理解用户为什么会做出如此疯狂的决定,请查看。一旦用户将网站设置为拉丁语-1模式,如果他们使用的字符既可以理解为拉丁语-1,也可以理解为Unicode(例如,名称中常见的字母e或ç),Internet Explorer将用拉丁语-1对其进行编码

这意味着,如果用户搜索“切格瓦拉”,它将在服务器端错误地通过。在Ruby1.9中,当文本不可避免地进入正则表达式引擎时,这将导致编码错误。在Ruby1.8中,它将导致用户的错误结果

通过创建一个只能被IE理解为unicode字符的参数,我们迫使IE查看accept charset属性,该属性告诉IE将所有字符编码为UTF-8,即使是可以用拉丁语-1编码的字符

请记住,在Ruby 1.8中,将Latin-1数据放入UTF-8数据库非常简单(因为整个堆栈中没有任何内容检查用户在任何时候发送的字节是否为有效的UTF-8字符)。因此,Ruby应用程序(和PHP应用程序等)出现这种面向用户的错误是非常常见的,因此,用户尝试更改编码作为缓解措施也是非常常见的


综上所述,当我编写此修补程序时,我没有意识到参数的名称会出现在面向用户的位置(它与使用GET操作的表单(如搜索表单)有关)。既然这样做了,我们将把这个参数重命名为
\u e
,并使用一个看起来更无害的unicode字符。

这是一个“文档”类型的Q&a-我试图在这里找到答案,最后在提交消息中找到答案,所以我想在这里与其他对雪人感兴趣的人分享它……也请看。引用语说“IE5+”,那么问题可能也会出现在较新的IE版本中?要获得更详细的回复,请查看(另外,请参阅下面我的回复)如果这最终变成了一个透明的参数,比如_方法,那么它可能就不会那么令人困惑了。不过,这是一件多么疯狂的事情啊。谢谢你的详细回答Yehuda-虽然我认为保留雪人是最好的结果,但它可能是“企业”会模仿的愚蠢的事情之一-“雪人到底是什么?!这是什么?”一个商业,而不是一个游戏!…啊。@Matthew,奇怪的是你是对的。但我确实觉得这个解决方案给人留下了深刻的印象。从那以后,Snowman被一个名为utf8的隐藏输入所取代,其值设置为“✓”.我在语言切换器中使用了一个form_标记,并开始出现大量异常,因为一个爬虫程序似乎对此值有问题,并且错误地将utf8参数及其值与表单中选择选项的值连接在一起。