首页 > 其他分享 >请说说escape、encodeURI、decodeURI、encodeURIComponent和decodeURIComponent的区别?

请说说escape、encodeURI、decodeURI、encodeURIComponent和decodeURIComponent的区别?

时间:2024-11-25 09:23:31浏览次数:4  
标签:编码 decodeURI 字符 URI decodeURIComponent escape encodeURIComponent encodeURI

这五个函数都是 JavaScript 中用于处理 URI 的函数,但它们的目标和处理范围不同:

1. escape()unescape():

  • escape(): 对字符串进行编码,将非 ASCII 字符转换为 %xx%uxxxx 格式。已废弃,不推荐使用,因为它不能正确处理非 ASCII 字符,特别是 Unicode 字符。它主要用于对 ASCII 字符串进行编码,例如将空格转换为 %20
  • unescape():escape() 编码的字符串进行解码。同样已废弃

2. encodeURI()decodeURI():

  • encodeURI(): 用于编码整个 URI。它会将 URI 中的特殊字符(例如空格、#、? 等)转换为 %xx 格式,但不会编码 URI 的保留字符,例如 : / ? ; = + & @ # 等。目的是对整个 URI 进行编码,以便在浏览器地址栏或链接中使用。
  • decodeURI():encodeURI() 编码的 URI 进行解码。

3. encodeURIComponent()decodeURIComponent():

  • encodeURIComponent(): 用于编码 URI 的组成部分,例如查询参数。它会将所有非字母数字字符(除了 - _ . ! ~ * ' ( ))转换为 %xx 格式,包括保留字符。目的是对 URI 的各个部分进行编码,以便安全地将其作为查询参数或其他 URI 组件使用。
  • decodeURIComponent():encodeURIComponent() 编码的 URI 组件进行解码。

总结与对比:

特性 escape() encodeURI() encodeURIComponent()
目的 编码字符串(已废弃) 编码整个 URI 编码 URI 组件
编码范围 非 ASCII 字符 URI 中的特殊字符,不包括保留字符 所有非字母数字字符,包括保留字符
保留字符 不处理 不编码 编码
示例 escape("你好 世界") -> %u4F60%u597D%20%u4E16%u753B (已废弃) encodeURI("https://www.example.com/你好 世界") -> https://www.example.com/%E4%BD%A0%E5%A5%BD%20%E4%B8%96%E7%95%8C encodeURIComponent("你好 世界") -> %E4%BD%A0%E5%A5%BD%20%E4%B8%96%E7%95%8C
推荐使用 ✅ 用于编码整个 URI ✅ 用于编码 URI 组件

实际应用场景:

  • 如果你需要编码整个 URI,例如在 <a> 标签的 href 属性中使用,应该使用 encodeURI()
  • 如果你需要编码 URI 的一部分,例如查询参数,应该使用 encodeURIComponent()

强烈建议避免使用escape()unescape(),它们已经过时并且存在编码问题。 使用 encodeURI()encodeURIComponent() 可以更好地处理 Unicode 字符,并提供更可靠的 URI 编码和解码功能。

标签:编码,decodeURI,字符,URI,decodeURIComponent,escape,encodeURIComponent,encodeURI
From: https://www.cnblogs.com/ai888/p/18566902

相关文章

  • 第二百七十一节 JPA教程 - JPA查询like Escape示例
    JPA教程-JPA查询likeEscape示例如果模式字符串包含应匹配的下划线或百分号,则ESCAPE子句可以使用\指定转义字符:SELECTdFROMDepartmentdWHEREd.nameLIKE'QA\_%'ESCAPE'\' 例子下面的代码来自PersonDaoImpl.java。packagecn.w3cschool.common;importjava.......
  • [题解] ICPC网络预选赛 2024 第二场 E Escape (含题目翻译)
    [题解]ICPC网络预选赛2024第二场EEscape(含题目翻译)tag:图论、BFS、最短路题干为原文DeepL翻译题目描述Sneaker在一个巨大的迷宫中醒来,现在他想逃离这个迷宫。通过迷宫中每个房间的地图,Sneaker了解了迷宫的结构。迷宫由......
  • Vova Escapes the Matrix
    做的时候就差如何得出一个点到两个不同的出口的最短路和次短路了啊分类讨论如果图不能到达出口,那么可以把所有'.'都填了如果图只能达到一个出口,那么就是所有'.'的个数减去起点到这个出口的最短路如果图可以到达两个及以上出口,考虑填满陷阱之后,图长成什么样子:此时一定刚好还剩......
  • WPF WebBrowser navigate to website via url and escape script error warning
    Copyfrom https://www.iditect.com/faq/csharp/wpf-webbrowser-control--how-to-suppress-script-errors.html#:~:text=To%20suppress%20these%20script%20errors%2C%20you%20can%20handle,using%20the%20Cancel%20property%20of%20the%20WebBrowserNavigatingEventArgs%20pa......
  • [1031] re.escape() function in re of Python
    Certainly!Let’sunravelthemysteriesofthere.escape()functioninPython.......
  • 电脑hold escape key to prevent startlsback怎么处理?
     电脑出现holdescapekeytopreventStartlsBackfrom,一般遇到这种问题之后,一直按住ESC键就没有了。但是还需彻底的解决掉这个问题。首先我们按下“ctrl+alt+del”组合键打开任务管理器,左上角“运行新任务”,输入“control”并确定,就可以打开控制面板,查看方式为“类别......
  • SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes
     SyntaxError:(unicodeerror)'unicodeescape'codeccan'tdecodebytes报错解释:这个错误通常发生在Python代码中,当你尝试使用包含反斜杠(\)的字符串时。在Python中,反斜杠通常用于开始转义字符序列。例如,\n 代表一个换行符。在字符串前加 r 可以阻止这种转义,但是......
  • The Escapee
    SCP-3125,逃亡者TypicalPartyinDorm考虑对于一个子串\(s[L,R]\),在给定\(S\)的情况下判断会产生多少种回文串。可以注意到,首先\(S\)需要包含某一个特定集合\(T\),然后会有\(|S|^{cnt}\)的贡献。怎么做?对于每个集合维护\(ccnt\),\(\mathcal{O}(17\times2^{17}\times......
  • P9650 [SNCPC2019] Escape Plan
    原题链接第一份代码#include<bits/stdc++.h>#definelllonglongconstllmaxs=2e18;usingnamespacestd;lle[1000005];lld[1000005];structnode{llto,len;booloperator<(constnode&b)const{returnb.len>len;}};......
  • C122 李超树合并+DP CF932F Escape Through Leaf
    视频链接:C122李超树合并+DPCF932FEscapeThroughLeaf_哔哩哔哩_bilibili   C65【模板】线段树合并P4556[Vani有约会]雨天的尾巴-董晓-博客园(cnblogs.com)CF932FEscapeThroughLeaf#include<iostream>#include<cstring>#include<algorithm>using......