【问题标题】:invalid byte sequence in UTF-8 on page request页面请求中 UTF-8 中的无效字节序列
【发布时间】:2011-05-22 08:23:42
【问题描述】:

我在页面请求(永久链接)上收到“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”)。知道为什么会出现这种情况,或者我可以做些什么来调试/重现它?

谢谢

【问题讨论】:

    标签: ruby-on-rails-3


    【解决方案1】:

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

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

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

    【讨论】:

    【解决方案2】:

    我刚刚发布了一个名为 UTF8Cleaner 的新 gem,它很大程度上基于 @phoet 和 @pithyless 的工作。它包含一个 Railtie,因此您只需将其放入您的 Gemfile 中,就可以忘记那些“无效字节序列”错误。

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

    【讨论】:

    • 我为此苦苦挣扎,这颗宝石为我做到了!
    【解决方案3】:

    与@phoet 类似,我也使用 Rails 中间件来解决类似的编码问题。

    在 Ruby 1.9.3(无 Iconv)上测试:

    https://gist.github.com/3639014

    【讨论】:

      【解决方案4】:

      如果您使用的是 apache(和 mod_rails),您可以通过遵循以下答案来防止这些无效的 url 请求完全访问您的 Rails 应用程序:

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

      【讨论】:

        猜你喜欢
        • 2020-06-10
        • 2015-07-04
        • 2012-03-25
        • 1970-01-01
        • 1970-01-01
        • 2011-02-28
        • 2016-07-05
        • 2013-08-20
        • 1970-01-01
        相关资源
        最近更新 更多