我在页面请求(永久链接)上得到“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”)。知道为什么会出现这种情况或者我该如何调试/重现它?
由于
答案 0 :(得分:13)
我们创建了一个rails middleware,用于过滤掉我们应用中无法处理的所有奇怪编码。
我们遇到的问题是有些请求有奇怪的编码,例如Cp1252 / Windows-1252。当ruby 1.9尝试将这些字符串与utf-8 regexp匹配时,它会爆炸。
我尝试了使用iconv处理这个问题的各种方法,但它看起来像在我的mac上工作的解决方案在服务器上不起作用。所以最简单的方法可能是最好的......
答案 1 :(得分:7)
我刚发布了一个名为UTF8Cleaner的新宝石,它主要基于@phoet和@pithyless的工作。它包含一个Railtie,所以你可以将它放入你的Gemfile中,忘掉那些“无效的字节序列”错误。
答案 2 :(得分:0)
答案 3 :(得分:0)
如果您使用的是apache(和mod_rails),则可以通过以下答案阻止这些无效的网址请求完全点击您的Rails应用程序: