【问题标题】:How to encode/decode UTF-8 in HTTP headers in Rails?如何在 Rails 的 HTTP 标头中编码/解码 UTF-8?
【发布时间】:2015-05-15 11:04:34
【问题描述】:

我正在使用“将 Rails 闪存消息插入 HTTP 标头以显示 Ajax 响应错误”模式,如下所示:

控制器:

 def flash_as_header
   return unless request.xhr?
   [:error, :warning, :notice].each do |type|
    if flash[type]
     response.headers["X-Ajax-#{type.to_s.humanize}"] = flash[type]
    end
   end
 end

JQuery:

 $(document).ajaxComplete(function(response, status, xhr) {
    var types = ["Error", "Notice", "Warning"];
    for (i = 0, l = types.length; i < l; ++i) {
        msg = status.getResponseHeader("X-Ajax-" + types[i]);
        if(msg) {
            break;
        }
    }
    if(msg) {
        $('.flash-error').text(msg).removeClass('is-hidden');
    }
 });

这可行,但我遇到了字符编码问题。 Flash 消息包含 UTF-8 特殊字符,目标 HTML 文档是 UTF-8。

这是一个示例字符串,它应该会出现:

Användare

这是它在 HTTP 响应中的样子(正确:%C3%A4 是 ä):

X-Ajax-Error:Anv%C3%A4ndare

这就是 HTML 文档中的输出方式:

Användare

这与此表 (http://www.i18nqa.com/debug/utf8-debug.html) 一致,该表表示“问题是由 UTF-8 字节被解释为 Windows-1252(或 ISO 8859-1)字节引起的。”

我不确定如何以及在哪里解决这个问题 - 在 JQuery 函数、Rails 控制器或 HTML 模板中?

【问题讨论】:

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


    【解决方案1】:

    Javascript 中的转义和解码组合已经奏效:

    我改变了这个:

     $('.flash-error').text(msg).removeClass('is-hidden');
    

    到这里:

    $('.flash-error').text(decodeURIComponent(escape(msg))).removeClass('is-hidden');
    

    现在输出是正确的。

    【讨论】:

      猜你喜欢
      • 2013-06-15
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      • 2022-01-13
      • 2011-09-02
      • 1970-01-01
      相关资源
      最近更新 更多