js与java对http参数含有特殊字符的传递处理

转载 2016年08月29日 19:38:26

http://www.cnblogs.com/digdeep/p/5580959.html


在使用 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/


http参数中特殊字符处理

特殊字符 有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制...
  • hellochenlian
  • hellochenlian
  • 2014年08月12日 11:23
  • 31934

URL传递参数包含特殊字符的处理

url中包含?、=和&等特殊字符时,如果不进行编码,后台接收到参数的时候,会出现信息丢失的问题,导致后台接收的参数不全。...
  • sd4015700
  • sd4015700
  • 2014年08月01日 12:20
  • 2413

js中传递特殊字符&的方法

今天写了一个通过js把一个参数传到后台, var returnUrl="******2.action?_eosActionFlow=action2&name=李四"; 使用的window.loca...
  • zMengLei
  • zMengLei
  • 2014年03月31日 21:26
  • 837

用URL传参带特殊字符,特殊字符丢失(encode)

一、问题阐述 用URL传参数的时候,用&符号连接,如果某一个参数中含”#$ ^ & * + =”这些符号的时候,在另一个页面getParameter就会取不到传过来的参数。 二、解决方法 ...
  • qiaqia609
  • qiaqia609
  • 2015年07月29日 14:01
  • 8798

android js 交互的特殊字符处理

android回调的参数包含“%”时,有可能会被自动转义成16进制,如%41被转换成A 解决方法: 使用String t = URLEncoder.encode(“传入参数”,“UTF-8”) 这个方...
  • wl724120268
  • wl724120268
  • 2017年08月09日 10:55
  • 243

url 传递参数(特殊字符)解决方法

首先设置 apache 配置文件, server.xml 在 port=8080 那一行中加上 URIEcoding=GBK 有些符号在URL中是不能直接传递的,如果要在URL中传递这些特...
  • hejisan
  • hejisan
  • 2016年06月30日 00:47
  • 15387

http请求数据包含特殊字符处理(java)

问题描述:android客户端与后台进行网络请求的时候,为了安全起见,我们采用的方法一般是加签名,这个签名可以是Base64加密过的,或是RSA加密过的,这些签名的共同特点就是一大长串字符串,里面包含...
  • bunny1024
  • bunny1024
  • 2017年03月17日 14:02
  • 4165

Java http处理get请求,参数中带特殊字符处理方式

指定参数可能出现空格的参数 比如 http://baidu.com?name=han&content=hello world则这样处理 url = “http://baidu.com?name...
  • konglongaa
  • konglongaa
  • 2017年12月23日 08:56
  • 63

URL的参数中有加号传值的问题(URL特殊字符)

2012-05-29 01:43URL特殊字符需转义      1、空格换成加号(+)    2、正斜杠(/)分隔目录和子目录    3、问号(?)分隔URL和查询    ...
  • yusewuhen
  • yusewuhen
  • 2014年07月31日 14:03
  • 4894

iOS Http传输过程中对特殊字符的处理

在进行http传输的过程,如果有特殊的符合,例如“+,&。*”,不会进行处理,都直接替换掉了。原因:默认的系统不会对这些特殊符号进行转义,只会进行替换解决办法:在post之前对这些特殊符号做一次UTF...
  • dfman1978
  • dfman1978
  • 2017年06月12日 15:14
  • 472
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:js与java对http参数含有特殊字符的传递处理
举报原因:
原因补充:

(最多只允许输入30个字)