java中URLEncoder.encode与URLDecoder.decode处理url特殊参数的方法

 更新时间:2017年03月21日 10:24:08   作者:digdeep  
这篇文章主要给大家介绍了关于java中URLEncoder.encode与URLDecoder.decode处理url特殊参数的方法,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。

最近在使用 url 的 queryString 传递参数时,因为参数的值,被DES加密了,而加密得到的是 Base64的编码字符串

类似于:

za4T8MHB/6mhmYgXB7IntyyOUL7Cl++0jv5rFxAIFVji8GDrcf+k8g==

显然 这里面含有了 特殊字符: / + = 等等,如果直接通过url 来传递该参数:

url = "xxxxx?param=" + "za4T8MHB/6mhmYgXB7IntyyOUL7Cl++0jv5rFxAIFVji8GDrcf+k8g==";

那么在服务端获得 param 会变成类似于下面的值:

"za4T8MHB/6mhmYgXB7IntyyOUL7Cl 0jv5rFxAIFVji8GDrcf k8g=="

我们看到 三个 + 号消失了。

其原因就是:如果url参数值含有特殊字符时,需要使用 url 编码。

url = "xxxxx?param=" + URLEncoder.encode("xxx", "utf-8");

然后服务端获取时:

String param = URLDecoder.decode(param, "utf-8");

这样才能获得正确的值: "za4T8MHB/6mhmYgXB7IntyyOUL7Cl++0jv5rFxAIFVji8GDrcf+k8g=="

其实 js 中也有类似功能的函数:

参见:js中编码函数:escape,encodeURI,encodeURIComponent

注意事项:

URLEncoder should be the way to go. You only need to keep in mind to encode only the individual query string parameter name and/or value, not the entire URL, for sure not the query string parameter separator character & nor the parameter name-value separator character =

String q = "random word 拢500 bank $";
String url = "http://example.com/query?q=" + URLEncoder.encode(q, "UTF-8");

URLEncoder 必须 仅仅 编码 参数 或者参数的值,不能编码整个 url,也不能一起对 param=value 进行编码。而是应该: param=URLEncode(value, "utf-8")

或者 URLEncode(param, "utf-8")=URLEncode(value, "utf-8")

因为 url 中的 & 和 = 他们是作为参数之间 以及 参数和值之间的分隔符的。如果一起编码了,就无法区分他们了。

进一步参考文档:

https://www.talisman.org/~erlkonig/misc/lunatech%5Ewhat-every-webdev-must-know-about-url-encoding/

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Mybatis与Jpa的区别和性能对比总结

    Mybatis与Jpa的区别和性能对比总结

    mybatis和jpa两个持久层框架,从底层到用法都不同,但是实现的功能是一样的,所以说一直以来颇有争议,所以下面这篇文章主要给大家介绍了关于Mybatis与Jpa的区别和性能对比的相关资料,需要的朋友可以参考下
    2021-06-06
  • Java 设计模式中的策略模式详情

    Java 设计模式中的策略模式详情

    这篇文章主要介绍了Java 设计模式中的策略模式详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 在Spring Boot中如何使用Cookies详析

    在Spring Boot中如何使用Cookies详析

    这篇文章主要给大家介绍了关于在Spring Boot中如何使用Cookies的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11
  • 深入理解Spring Cache框架

    深入理解Spring Cache框架

    今天给大家分析一下 Spring 框架本身对这些缓存具体实现的支持和融合。使用 Spring Cache 将大大的减少我们的Spring项目中缓存使用的复杂度,提高代码可读性。本文将从以下几个方面来认识Spring Cache框架。感兴趣的小伙伴们可以参考一下
    2018-11-11
  • java判断对象中某个属性是否为空方法代码

    java判断对象中某个属性是否为空方法代码

    这篇文章主要给大家介绍了关于java判断对象中某个属性是否为空的相关资料,最近遇到后台接收值的时候,需要对接收对象进行非空校验,需要的朋友可以参考下
    2023-07-07
  • JAVA截取字符串的几种常用方法

    JAVA截取字符串的几种常用方法

    这篇文章主要给大家介绍了关于JAVA截取字符串的几种常用方法, 在处理字符串的过程中有很多情况下会遇到需要截取字符串的情况,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • Java集合框架之List ArrayList LinkedList使用详解刨析

    Java集合框架之List ArrayList LinkedList使用详解刨析

    早在 Java 2 中之前,Java 就提供了特设类。比如:Dictionary, Vector, Stack, 和 Properties 这些类用来存储和操作对象组。虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用 Vector 类的方式和使用 Properties 类的方式有着很大不同
    2021-10-10
  • Java手动实现Redis的LRU缓存机制

    Java手动实现Redis的LRU缓存机制

    在Java中LRU的实现方式是使用HashMap结合双向链表,HashMap的值是双向链表的节点,双向链表的节点也保存一份key value。
    2021-05-05
  • Jmeter命令行执行脚本如何设置动态参数

    Jmeter命令行执行脚本如何设置动态参数

    这篇文章主要介绍了Jmeter命令行执行脚本如何设置动态参数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Spring的@Lazy懒加载注解用法详细解析

    Spring的@Lazy懒加载注解用法详细解析

    这篇文章主要介绍了Spring的@Lazy懒加载注解用法详细解析,SpringIoC容器会在启动的时候实例化所有单实例 bean ,如果我们想要实现 Spring 在启动的时候延迟加载 bean,即在首次调用bean的时候再去执行初始化,就可以使用 @Lazy 注解来解决这个问题,需要的朋友可以参考下
    2023-11-11

最新评论