Javascript 转义用户输入以匹配页面字符集

Javascript 转义用户输入以匹配页面字符集,javascript,character-encoding,url-encoding,Javascript,Character Encoding,Url Encoding,简短版本: 是否有javascript函数对数据进行编码以匹配页面的字符集? 例如 当字符集为UTF-8时,n变成%C5%84 当字符集为ISO-8859-2时,n变为%F1 背景: 我有一个客户端javascript库,它通过AJAX发送用户输入的数据 它作为ascii blob的一部分发送,在解包(通过代理)后,数据应该与通常通过提交表单发送的数据完全匹配(这样站点的服务器端逻辑就不需要更改) 当然,当浏览器发送特殊字符时,会对其进行转义。为了匹配这一点,在进一步处理数据之前,我一直在

简短版本:

是否有javascript函数对数据进行编码以匹配页面的字符集? 例如

  • 当字符集为UTF-8时,
    n
    变成
    %C5%84
  • 当字符集为ISO-8859-2时,
    n
    变为
    %F1

背景:

我有一个客户端javascript库,它通过AJAX发送用户输入的数据

它作为ascii blob的一部分发送,在解包(通过代理)后,数据应该与通常通过提交表单发送的数据完全匹配(这样站点的服务器端逻辑就不需要更改)

当然,当浏览器发送特殊字符时,会对其进行转义。为了匹配这一点,在进一步处理数据之前,我一直在对数据使用
encodeURIComponent()
。但是现在这个库被用于具有其他字符集的站点,例如ISO-8859-2

现在,我用的是:

function escapeByCharset(str) {
    if (document.charset === "ISO-8859-2") {
        return escape(str);
    } else {
        return encodeURIComponent(str);
    }
}

但理想情况下,我正在寻找所有字符集的通用解决方案。

您可以使用此函数,让浏览器为您编码:

function encodeWithPageEncoding(str) {
    var pathString = "http://a.b?";
    var el = document.createElement('a');
    el.href = pathString + str;
    return el.href.slice(pathString.length +1);
}

这闻起来全不对。1) 切勿使用
escape()
。忘了它的存在吧,它已经坏了,而且从永远开始就被弃用了。2) 什么是“解包”?3) 服务器怎么了?它应该能够透明地解码传入数据。在客户站点上,浏览器将\xC584编码为%F1。我想要一个与之匹配的函数。它不回答我问过你的任何问题。1。这不是问题。2.将ascii数据块转换回其组成数据。3.我不知道,这不是我的服务器。但它一直在接受iso-8859-2%的编码。看在我的份上,他们不会改成utf-8。2)从没听说过这个词。我分别使用编码/解码或序列化/解析。3) 啊,我明白了,我以为它在你的控制之下。您是否有一个客户端JS库供您使用?