我正在编写一个适用于使用 ISO-8859-1 的网站的 Chrome 扩展程序。只是为了提供一些上下文,我的扩展程序所做的是通过添加更方便的帖子表单来更快地在网站的论坛上发布帖子。然后,写入消息的文本区域的值通过 Ajax 调用(使用 jQuery)发送。
如果邮件包含类似á
这些字符的字符,则在发布的邮件中显示为 á。强制浏览器显示 UTF-8 而不是 ISO-8859-1 可以á
正确显示。
我的理解是 Javascript 对其字符串使用 UTF-8,所以我的理论是,如果我在发送之前将字符串转码为 ISO-8859-1,它应该可以解决我的问题。但是,似乎没有直接的方法可以在 Javascript 中进行这种转码,而且我无法触及服务器端代码。有什么建议吗?
我尝试将创建的表单设置为使用 iso-8859-1,如下所示:
var form = document.createElement("form");
form.enctype = "application/x-www-form-urlencoded; charset=ISO-8859-1";
并且:
var form = document.createElement("form");
form.encoding = "ISO-8859-1";
但这似乎不起作用。
编辑:
问题实际上在于 jQuery 是如何对消息进行 urlencoding 的(或其他方式),我通过告诉 jQuery 不要处理数据并自己处理来解决这个问题,如下面的片段所示:
function cfaqs_post_message(msg) {
var url = cfaqs_build_post_url();
msg = escape(msg).replace(/\+/g, "%2B");
$.ajax({
type: "POST",
url: url,
processData: false,
data: "message=" + msg + "&post=Preview Message",
success: function(html) {
// ...
},
dataType: "html",
contentType: "application/x-www-form-urlencoded"
});
}