(翻译)Rails 的 “utf8=✓” 的历史跟删除方法以及 snowman ☃
Rails 中通过 form_tag 与 form_for 来生成 form 的时候,会自动追加 这么一个 input 的元素,submit 的话会添加 utf8=✓ 那么一个参数(parameter)。调查了一下这么做的历史跟删除方法。
历史
在 Rails3 中,为了在 Internet Explorer 5、6、7、8 中把参数用 Unicode 来进行编码,之前提到的heper来生成的form里生成叫做 snowman 的参数。详细经过请看 提交描述、添加了 snowman 的 Yehuda Katz 在 stackoverflow 的回答。
虽然没用过当时的 rails,不过因为用的是 ☃ 那么个字符,所以就用 _snowman=☃ 来表示了。
正如 Yehuda Katz 写的回答那样,从 _snowman 变成 _e,在此之后 用utf8=✓,或者 还是用_utf8=☃ 的讨论,最后还是 回归为 utf8=✓ 了。大家都很高兴。
删除方法
从所有的 form 中 删除 utf8 的情况
生成 utf8 的 input 标签的代码请看 这里
1 | rails/actionview/lib/action_view/helpers/form_tag_helper.rb |
正如注释写的那样,覆盖 utf8_enforcer_tag 方法(把该代码放到 config/initializers 下)
1 | module ActionView |
从特定的 form 中删除 utf8 的情况
看了下 rails/actionview/lib/action_view/helpers/form_helper.rb 与 rails/actionview/lib/action_view/helpers/form_tag_helper.rb 的代码。
form_for 的情况
1 | form_for @model, enforce_utf8: false do |f| |
form_tag 的情况
1 | form_tag '/models', enforce_utf8: false do |
该文翻译至 这里