【问题标题】:What is the best way to handle submission of non-utf-8 data in Rails 3 forms?在 Rails 3 表单中处理非 utf-8 数据提交的最佳方法是什么?
【发布时间】:2012-06-03 06:43:46
【问题描述】:

我正在使用 Rails 3.2.3 和 Ruby 1.9.3。 我有一个名为 Post 的模型,它接受标题和描述。 站点前端通过ajax请求接收通过后端提交的信息。当我填写表格时,假设

title: foo
content: foobar

并提交,我可以通过前端查看数据没有问题。

但是,每当我通过表单提交非 utf8 数据时,例如(注意花哨的引号):

title: foo
content: “foobar” 

当我尝试渲染表单时,出现以下错误:

ActionView::Template::Error (incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string))

我的 .js.erb 文件如下所示:

$("#my_post").html('<%= escape_javascript(render :partial => 'post') %>');

我意识到这是编码的问题,但我不确定我应该如何以最佳方式处理它。我想到了几个选择:

  1. 使用 iconv 库去除非 utf8 - 通过 before_save 过滤器对我的应用程序中的每个模型执行此操作
  2. Specifying at the top of the js 该文档包含 utf-8(不确定这是否可行)
  3. 在我的表单中使用accept-charset="UTF-8" 强制浏览器避免提交非utf-8 内容。

我什至不确定这些解决方案是否会有所帮助,而最有效的方法是。 谢谢!

【问题讨论】:

  • form_tag 视图助手将为您添加accept-charset="UTF-8"。有什么理由不能使用form_tag

标签: ruby-on-rails ruby encoding utf-8


【解决方案1】:

你需要仔细看看是否

  • 您实际上是在向您的应用发送非 UTF-8 数据,或者
  • 您正在发送 UTF-8 数据,但 Ruby/Rails 无法识别它

要查看它是什么,您需要检查“电线”上的数据。 (在 Internet 上发送的内容。)使用窥视工具,例如 Wireshark 或代理间谍,例如 Fiddler

可以使用 8859 或 UTF-8 发送弯引号。

建议 您应该将 HTML 页面设置为 UTF-8。从页面上的脚本发送的任何 Ajax 也应该使用 UTF-8。见http://www.utf8.com/

添加(回复:关于 Rails 如何设置表单字符编码的评论)

Ajax 字符编码的问题是页面的 编码设置如何。 A blog post.所以一定要在你的页面模板中设置页面的UTF-8编码。

【讨论】:

  • Rails 默认将字符集设置为 UTF-8。
  • @GabeKopley -- 这只是设置表单的编码。它对 Ajax 调用没有影响。
  • 链接的博客文章作者希望他的页面采用 ISO-8859-15 字符集。 UTF-8 不需要这样做,这是 Rails 的默认设置。
  • 如何让用户发布任意编码,Rails服务器检测到并转换为UTF-8?我的标准表单有接受字符集,但浏览器从不将上传的文件(非 UTF-8)转换为 UTF-8
【解决方案2】:

我怀疑您没有使用表单助手,因为您提到了在表单中添加 accept-charset="UTF-8" 的问题。

表单助手将添加accept-charset 属性以及snowman parameter 一起确保您从浏览器获取UTF-8 数据。

请参阅Rails Form helpers 指南。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多