【发布时间】: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