escape、unescape废弃

简介: escape、unescape废弃

爱所有人,信任少数人,不负任何人。——莎士比亚

今天看到这个API废弃了,提示使用 encodeURIencodeURIComponent 代替。

但是貌似有部分符号并没有转义成功

最后在示例看到了解决办法

var fileName = 'my file(2).txt';
var header = "Content-Disposition: attachment; filename*=UTF-8''"
             + encodeRFC5987ValueChars(fileName);
console.log(header);
// 输出 "Content-Disposition: attachment; filename*=UTF-8''my%20file%282%29.txt"
function encodeRFC5987ValueChars (str) {
    return encodeURIComponent(str).
        // 注意,尽管 RFC3986 保留 "!",但 RFC5987 并没有
        // 所以我们并不需要过滤它。
        replace(/['()]/g, escape). // i.e., %27 %28 %29
        replace(/\*/g, '%2A').
            // 下面的并不是 RFC5987 中 URI 编码必须的
            // 所以对于 |`^ 这 3 个字符我们可以稍稍提高一点可读性
        replace(/%(?:7C|60|5E)/g, unescape);
}
// 以下是上述功能的替换方案
function encodeRFC5987ValueChars2(str) {
  return encodeURIComponent(str).
    // 注意,尽管 RFC3986 保留 "!",但 RFC5987 并没有,
    // 所以我们并不需要过滤它。
    replace(/['()*]/g, c => "%" + c.charCodeAt(0).toString(16)). // i.e., %27 %28 %29 %2a (请注意,"*" 的有效编码是 %2A
                                                                 // 这需要调用 toUpperCase() 方法来正确编码)
    // 以下并不是 RFC5987 编码所必须的,
    // 这样我们可以让 |`^ 在网络上获取更好的可读性
    replace(/%(7C|60|5E)/g, (str, hex) => String.fromCharCode(parseInt(hex, 16)));
}
相关文章
|
7月前
|
JavaScript IDE 开发工具
python中的SyntaxError: invalid character in identifier(语法错误:标识符中有无效字符)
【5月更文挑战第14天】python中的SyntaxError: invalid character in identifier(语法错误:标识符中有无效字符)
531 8
C++11新特性探索:原始字符串字面值(raw string literal)
原始字符串字面值(raw string literal)是C++11引入的新特性。
148 0
|
JavaScript 前端开发 索引
正则表达式系列之 —— 模式(Patterns)和修饰符(flags)
正则表达式系列之 —— 模式(Patterns)和修饰符(flags)
147 0
正则表达式系列之 —— 模式(Patterns)和修饰符(flags)
|
JavaScript Java
TeaVM当前版本(0.7.0)还不支持传递字串参数
TeaVM当前版本(0.7.0)还不支持传递字串参数
77 0
|
JavaScript 安全 前端开发
underscore 系列之字符实体与 _.escape
underscore 提供了 _.escape 函数,用于转义 HTML 字符串,替换 &, <, >, ", ', 和 ` 字符为字符实体。underscore 同样提供了 _.unescape 函数,功能与 _.escape 相反。
163 0
underscore 系列之字符实体与 _.escape
|
JavaScript
JS中自定义replace可替换特殊符号$等,但无法忽略大小写的函数
//可替换特殊符号$等,但无法忽略大小写的函数 String.prototype.replaceStr = function (s1, s2) { this.str = this; if (s1.
1108 0
重构——47以明确函数取代参数(Replace Parameter with Explicit Methods)
以明确函数取代参数(Replace Parameter with Explicit Methods):你有一个函数,其中完全取决于参数值而采取不同的行为;针对该参数的每一个可用值,建立一个独立函数
1866 0