页面请求中UTF-8中的无效字节序列

时间:2011-05-22 08:23:43

标签: ruby-on-rails-3

我在页面请求(永久链接)上得到“UTF-8中的无效字节序列”,我不知道为什么也不能重现它,但我确实得到了很多这样的例外:

A ArgumentError occurred in products#index:

 invalid byte sequence in UTF-8
 activesupport (3.0.4) lib/active_support/core_ext/object/blank.rb:68:in `=~'

-------------------------------
Request:
-------------------------------

 * URL       : http://www.mysite.com/category/category-name-\x8E~ice
 * Parameters: {"page"=>1, "controller"=>"products", "action"=>"index", "category"=>"category-name-\x8E~ice"}

末尾的字符串不应该在那里(“ - \ x8E~ice”)。知道为什么会出现这种情况或者我该如何调试/重现它?

由于

4 个答案:

答案 0 :(得分:13)

我们创建了一个rails middleware,用于过滤掉我们应用中无法处理的所有奇怪编码。

我们遇到的问题是有些请求有奇怪的编码,例如Cp1252 / Windows-1252。当ruby 1.9尝试将这些字符串与utf-8 regexp匹配时,它会爆炸。

我尝试了使用iconv处理这个问题的各种方法,但它看起来像在我的mac上工作的解决方案在服务器上不起作用。所以最简单的方法可能是最好的......

答案 1 :(得分:7)

我刚发布了一个名为UTF8Cleaner的新宝石,它主要基于@phoet和@pithyless的工作。它包含一个Railtie,所以你可以将它放入你的Gemfile中,忘掉那些“无效的字节序列”错误。

https://github.com/singlebrook/utf8-cleaner

答案 2 :(得分:0)

与@phoet类似,我还使用Rails Middleware来解决类似的编码问题。

在Ruby 1.9.3上测试(没有Iconv):

https://gist.github.com/3639014

答案 3 :(得分:0)

如果您使用的是apache(和mod_rails),则可以通过以下答案阻止这些无效的网址请求完全点击您的Rails应用程序:

https://stackoverflow.com/questions/13512727/how-can-i-configure-apache-to-respond-400-when-request-contains-an-invalid-byte/13527812#13527812