首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby on Rails 3表单中的_snowman参数是做什么用的?

Ruby on Rails 3表单中的_snowman参数是做什么用的?
EN

Stack Overflow用户
提问于 2010-07-11 13:45:32
回答 1查看 38K关注 0票数 176

在Ruby on Rails 3(目前使用Beta4)中,我看到在使用form_tagform_for助手时,有一个名为_snowman的隐藏字段,其值为☃(Unicode \x9731)。

那么,这是用来做什么的?

EN

回答 1

Stack Overflow用户

发布于 2010-07-28 06:26:56

将此参数添加到表单是为了强制Internet Explorer (5、6、7和8)将其参数编码为unicode。

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

这意味着如果用户搜索"ChéGuevara",它将在服务器端错误地显示出来。在Ruby1.9中,当文本不可避免地进入正则表达式引擎时,这将导致编码错误。在Ruby 1.8中,它会给用户带来错误的结果。

通过创建一个只能被IE理解为unicode字符的参数,我们强制IE查看accept-charset属性,然后该属性告诉它将所有字符编码为UTF-8,甚至是可以用拉丁文-1编码的字符。

请记住,在Ruby1.8中,将拉丁-1数据放入UTF-8数据库中是非常简单的(因为整个堆栈中没有任何内容检查用户在任何时候发送的字节是否为有效的UTF-8字符)。因此,对于Ruby应用程序(以及PHP应用程序等)来说,这是非常常见的。来展示这种面向用户的bug,因此用户尝试更改编码作为权宜之计是非常常见的。

尽管如此,当我写这个补丁时,我并没有意识到参数的名称会出现在面向用户的地方(它会出现在使用GET操作的表单中,比如搜索表单)。既然是这样,我们将把这个参数重命名为_e,并使用一个看起来更无害的unicode字符。

票数 308
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3222013

复制
相关文章

相似问题

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