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

时间:2016-03-03 13:09:18

标签: javascript character-encoding url-encoding

简短版本:

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

例如

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

背景:

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

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

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

现在,我正在使用它:

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

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

1 个答案:

答案 0 :(得分:0)

您可以使用此功能让浏览器为您编码:

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