2

我正在使用 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. 在 js 的顶部指定文档包含 utf-8(不确定这是否可行)
  3. 在我的表单中使用accept-charset="UTF-8"强制浏览器避免提交非 utf-8 内容。

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

4

2 回答 2

0

你需要仔细看看是否

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

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

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

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

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

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

于 2012-05-29T02:41:49.070 回答
0

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

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

请参阅Rails 表单助手指南。

于 2012-05-29T03:14:19.620 回答