前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >escape、unescape废弃

escape、unescape废弃

作者头像
阿超
发布2022-08-21 14:43:23
1.4K0
发布2022-08-21 14:43:23
举报
文章被收录于专栏:快乐阿超快乐阿超

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

image-20220708132306785
image-20220708132306785

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

image-20220708132417722
image-20220708132417722

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

代码语言:javascript
复制
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)));
}
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com