[英]How to encode/decode UTF-8 in HTTP headers in Rails?
我正在使用“将Rails flash消息插入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');
}
});
这有效,但我遇到了字符编码问题。 闪存消息包含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模板中如何以及在何处修复此问题?
在Javascript中转义和解码的组合已经起作用:
我改变了这个:
$('.flash-error').text(msg).removeClass('is-hidden');
对此:
$('.flash-error').text(decodeURIComponent(escape(msg))).removeClass('is-hidden');
输出现在是正确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.