实践出真知,项目中遇到坑,填满后总结:编码不一定需要解码

rsa加密字段(base64位后),通过url?filed=value传输后,总是有+等特殊字符,然后到后端时base64解不开,发现很多空格。

尝试用encodeURI发现还是有空格,最后使用encodeURIComponent解决问题

总结时发现下面的文章说的比较透彻。

https://www.cnblogs.com/season-huang/p/3439277.html

一、前言

讲这3个方法区别的文章太多了,但是大部分写的都很绕。本文试图从实践角度去讲这3个方法。

二、escape和它们不是同一类

简单来说,escape是对字符串(string)进行编码(而另外两种是对URL),作用是让它们在所有电脑上可读。
编码之后的效果是%XX或者%uXXXX这种形式。
其中 ASCII字母、数字、@*/+ ,这几个字符不会被编码,其余的都会。
最关键的是,当你需要对URL编码时,请忘记这个方法,这个方法是针对字符串使用的,不适用于URL。
事实上,这个方法我还没有在实际工作中用到过,所以就不多讲了。

三、最常用的encodeURI和encodeURIComponent

对URL编码是常见的事,所以这两个方法应该是实际中要特别注意的。
它们都是编码URL,唯一区别就是编码的字符范围,其中
encodeURI方法不会对下列字符编码  ASCII字母、数字、~!@#$&*()=:/,;?+'
encodeURIComponent方法不会对下列字符编码 ASCII字母、数字、~!*()'
所以encodeURIComponent比encodeURI编码的范围更大。
实际例子来说,encodeURIComponent会把 http://  编码成  http%3A%2F%2F 而encodeURI却不会。

四、最重要的,我该什么场合用什么方法

区别上面说的很清楚了,接下来从实际例子来说说把。
1、如果只是编码字符串,不和URL有半毛钱关系,那么用escape。
2、如果你需要编码整个URL,然后需要使用这个URL,那么用encodeURI。
比如

encodeURI("http://www.cnblogs.com/season-huang/some other thing");

编码后会变为
"http://www.cnblogs.com/season-huang/some%20other%20thing";

其中,空格被编码成了%20。但是如果你用了encodeURIComponent,那么结果变为

"http%3A%2F%2Fwww.cnblogs.com%2Fseason-huang%2Fsome%20other%20thing"

看到了区别吗,连 "/" 都被编码了,整个URL已经没法用了。

  

3、当你需要编码URL中的参数的时候,那么encodeURIComponent是最好方法。

var param = "http://www.cnblogs.com/season-huang/"; //param为参数
param = encodeURIComponent(param);
var url = "http://www.cnblogs.com?next=" + param;
console.log(url) //"http://www.cnblogs.com?next=http%3A%2F%2Fwww.cnblogs.com%2Fseason-huang%2F"

看到了把,参数中的 "/" 可以编码,如果用encodeURI肯定要出问题,因为后面的/是需要编码的。

转载于:https://www.cnblogs.com/davidwang456/p/8861800.html

encodeURIComponent的用法相关推荐

  1. JS拼接字符串的过程中将JSON对象存到某个标签的属性中,encodeURIComponent(),btoa()用法介绍

    JS拼接字符串的过程中将JSON对象存到某个标签的属性中 JS拼接字符串的过程中将JSON对象存到某个标签的属性中,encodeURIComponent(),btoa()用法介绍 案例描述 实现方法 ...

  2. decodeURIComponent()函数和encodeURIComponent() 函数用法

    1.encodeURIComponent()函数 encodeURIComponent() 函数可把字符串作为 URI 组件进行编码. 该方法不会对 ASCII 字母和数字进行编码,也不会对这些 AS ...

  3. 新增成功到编制为空bug_36 个JS 面试题为你助力,让面试更有力(面试必读)

    来源:javapoint 译者:前端小智 点赞再看,养成习惯 本文 GitHub https://github.com/qq44924588... 上已经收录,更多往期高赞文章的分类,也整理了很多我的 ...

  4. 新增成功到编制为空bug_36 个JS 面试题为你助力金九银10

    来源:javapoint 译者:前端小智点赞再看,养成习惯 本文 GitHub https://github.com/qq44924588... 上已经收录,更多往期高赞文章的分类,也整理了很多我的文 ...

  5. URL传递中文、Ajax传递中文,Java如何编码如何解决乱码

    地址栏中出现汉字的情况有 两种,一种是汉字出现在URL的路径部分,一种是汉字出现在URL的传参的部分,第二种情况的时候必须采用编码后传参,接受时解码的方式完成传参.js中 编码有escape(),en ...

  6. 36 个JS 面试题为你助力金九银十(面试必读)

    来源:javapoint 译者:前端小智 为了保证的可读性,本文采用意译而非直译. 阿里云双12已开启,新老用户均可参与,2核1G云服务器仅需79元,,更多服务器配置及价格请关注:Hi拼团,或点此了解 ...

  7. 年薪60万,人才缺口1400万,这个方向你还不来?

    大家好,我是孙玄,前58集团技术委员会主席,前转转首席架构师,腾讯云最具价值专家 TVP...... 最近,有很多同学跟我聊,看到数据时代未来的技术发展趋势,说想转行往大数据方向发展,问我有啥好的建议 ...

  8. JSP页面GET请求中文乱码

    地址栏中出现汉字的情况有两种,一种是汉字出现在URL的路径部分,一种是汉字出现在URL的传参的部分,第二种情况的时候必须采用编码后传参,接受时解码的方式完成传参. js中编码有escape(),enc ...

  9. 在html中电子邮件链接,关于电子邮件:与HTML正文的mailto链接

    我在HTML文档中有几个mailto链接. 我可以在href的mailto:部分插入HTML格式的正文吗? Mail me 注意,(2016)在iOS中,添加和标签可以非常好地实现简单的斜体.粗体格式 ...

最新文章

  1. navicat 几个 可用的东西
  2. VTK:图片之ImageLaplacian
  3. linear-gradient与radial-gradient
  4. 计算机网络——IP地址与MAC地址
  5. JAVA入门级教学之(do...while循环)
  6. 厉害了!顶级学术期刊封面的“中国元素”
  7. Bootstrap CSS编码规范之代码组织规范
  8. [php] 解析JSON字符串
  9. 《战舰世界》携手汉堡王开启“战舰堡胃战”主题活动
  10. 直升机的扭力与反扭力
  11. Dev-C++ 一直提示源文件未编译,原因及解决办法
  12. 分享自己的超轻量级高性能ORM数据访问框架Deft
  13. EXCEL文本函数-数字小写换大写-英文大小写互换
  14. COMP SCI 3013 7089 - Event Driven Computing Semester java
  15. webassembly学习-modules
  16. 牛客上C++的面试题和答案
  17. java的图片上传详解
  18. kali 设置中文并安装输入法
  19. GMT 时间格式转换到 TDateTime (Delphi)
  20. 公众号学生成绩查询系统

热门文章

  1. mybitis第三讲:关联查询
  2. vue .native 方法未定义_vue最新面试题
  3. 程序流程图_干货收藏 | Java 程序员必备的一些流程图
  4. python写文件追加 按行追加_Python3 自学第14天:文件操作,文件句柄,上下文管理器...
  5. python圆的半径计算圆的周长列表_python计算圆周长、面积、球体体积并画出圆
  6. linux raid更换硬盘,linux系统raid1更换故障硬盘处理过程
  7. mysql支持非关系_说下oracle、mysql、非关系型数据库中的索引结构?
  8. android 之Fragment(轻量级的Activity)详解
  9. 机器学习——推荐算法
  10. 8种相似度度量方式的原理及实现【笔记自用】【1】