在Ruby on Rails 3(目前使用Beta4)中,我看到在使用form_tag
或form_for
助手时,有一个名为_snowman
的隐藏字段,其值为☃(Unicode \x9731)。
那么,这是用来做什么的?
发布于 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字符。
https://stackoverflow.com/questions/3222013
复制相似问题