gpt4 book ai didi

jquery - 如何在 Rails 中对 HTTP header 中的 UTF-8 进行编码/解码?

转载 作者:行者123 更新时间:2023-12-01 01:06:53 25 4
gpt4 key购买 nike

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

Controller :

 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 Controller 或 HTML 模板中?

最佳答案

Javascript 中的转义和解码组合已起作用:

我改变了这个:

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

对此:

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

输出现在是正确的。

关于jquery - 如何在 Rails 中对 HTTP header 中的 UTF-8 进行编码/解码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30257908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com