在Ruby on Rails 3(当前使用Beta 4)中,我看到使用form_tag
或form_for
帮助器时,会显示一个隐藏字段,其名称_snowman
为field(Unicode \ x9731)。
那么,这是为了什么呢?
在Ruby on Rails 3(当前使用Beta 4)中,我看到使用form_tag
或form_for
帮助器时,会显示一个隐藏字段,其名称_snowman
为field(Unicode \ x9731)。
那么,这是为了什么呢?
Answers:
将此参数添加到表单中是为了强制Internet Explorer(5、6、7 和 8)将其参数编码为unicode。
具体来说,如果用户将浏览器的编码切换为Latin-1,则可能会触发此错误。要了解用户为什么会决定做一些看似疯狂的事情,请查看此google搜索。用户将网站置于Latin-1模式后,如果他们使用可以理解为Latin-1和Unicode的字符(例如é或ç,名称中通用),则Internet Explorer会将其编码为Latin -1。
这意味着,如果用户搜索“ChéGuevara”,它将在服务器端错误地通过。在Ruby 1.9中,当文本不可避免地进入正则表达式引擎时,这将导致编码错误。在Ruby 1.8中,这将导致用户的结果不正确。
通过创建只能由IE理解为Unicode字符的参数,我们迫使IE查看accept-charset属性,然后告诉它将所有字符编码为UTF-8,甚至可以将其编码在Latin-1中。
请记住,在Ruby 1.8中,将Latin-1数据放入您的UTF-8数据库非常简单(因为整个堆栈中没有任何内容可以检查用户在任何时候发送的字节都是有效的UTF-8字符)。结果,对于Ruby应用程序(和PHP应用程序等)来说,出现这种面向用户的错误是非常普遍的,因此,用户尝试更改编码作为姑息措施是极为普遍的。
综上所述,当我编写此补丁程序时,我没有意识到参数的名称永远不会出现在面向用户的位置(使用GET操作的表单(例如搜索表单)也是如此。既然可以了,我们将把这个参数重命名为_e
,并使用看起来更无害的Unicode字符。