URL编码解决

摘要:
与其他系统对接时遇到的问题URL中传递认证码,URL默认只允许传递ASCII码中的数据,所以浏览器默认会进行一次编码将%等特殊符号转义后台web服务器收到URL中的参数,会默认进行一次解码,但遇到的问题是参数中含有+号的会被解码成空格解决办法:方法一、修改客户端将客户端带“+”的参数中的“+”全部替换为“2B%”,这样参数传到服务器端时就能得到“+”了。
与其他系统对接时遇到的问题
URL中传递认证码,
URL默认只允许传递ASCII码中的数据,所以浏览器默认会进行一次编码
将%等特殊符号转义
后台web服务器收到URL中的参数,会默认进行一次解码,
但遇到的问题是参数中含有+号的 会被解码成空格
解决办法:

方法一、修改客户端

将客户端带“+”的参数中的“+”全部替换为‍“2B%”,这样参数传到服务器端时就能得到“+”了。

方法二

修改服务器端,将空格替换为“+”,这种方式只适用于参数中有‍“+”没有空格的情况。

例子:

String a = reuqest.‍getParameter("clientStr")‍.replace(' ','+');


以上仅仅针对GET请求
URL中文转码
encodeURL函数主要是来对URI来做转码,它默认是采用的UTF-8的编码.
. UTF-8编码的格式:一个汉字来三个字节构成,每一个字节会转换成16进制的编码,同时添加上%号.
假设页面端输入的中文是一个“中”,按照下面步骤进行解码
1.第一次encodeURI,按照utf-8方式获取字节数组变成[-28,-72-83],对字节码数组进行遍历,把每个字节转化成对应的16进制数,这样就变成了[E4,B8,AD],最后变成[%E4,%B8,%AD] 此时已经没有了多字节字符,全部是单字节字符。
2、第二次encodeURI,进行编码,会把%看成一个转义字符,并不编码%以后字符,会把%编码成%25.把数组最后变成[%25E4,%25B8,%25AD]然后就把处理后的数据[%25E4,%25B8,%25AD]发往服务器端,
当应用服务器调用getParameter方法,getParameter方法会去向应用服务器请求参数
应用服务器最初获得的就是发送来的[%25E4,%25B8,%25AD],应用服务器会对这个数据进行URLdecode操作,应用服务器进行解码的这一次,不管是按照UTF-8,还是GBK,还是ISO-8859,,都能得到[%E4,%B8,%AD],因为都会把%25解析成%.并把这个值返回给getParameter方法
3、再用UTF-8解码一次,就得到"中"了。
想想看,如果不编码两次,当服务器自动解码的时候,假如是按照ISO-8859去解码UTF-8编码的东西,就是会出现乱码。
JS:
[sql] view plain copy
document.authorityForm.action = basePath3+"User_viewUser.do?id="+id+"&roleName="+encodeURI(encodeURI(roleName))+"&roleType="+roleType;
Java后台:
[sql] view plain copy
roleName = java.net.URLDecoder.decode(getRequest().getParameter("roleName"),"UTF-8");

免责声明:文章转载自《URL编码解决》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇windows下docker的安装及常用命令学习npm 进阶命令知多少(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

微信公众平台开发尝试

最近看了一篇博文是说微信公众平台搭建,于是心血来潮自己也尝试了一下。 1.不用多讲了,申请微信公众号,对于个人来说,只能申请订阅号。 可以看这个链接的文章,http://jingyan.baidu.com/article/414eccf6011ff06b431f0aec.html 2.采用的是Sina App Engine来脱管服务,就要申请sae开发者权...

PHP中文乱码的常见解决方法总结

PHP中文乱码是PHP开发中的常见问题之一。PHP中文乱码有时发生在网页本身,有些产生在于MySQL交互的过程中,有时与操作系统有关。下面进行一番总结。   一.首先是PHP网页的编码   1. php文件本身的编码与网页的编码应匹配   a. 如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html;...

ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别(转载)

原文出处:http://www.blogjava.net/xcp/archive/2009/10/29/coding2.html  最近老为编码问题而烦燥,下定决心一定要将其弄明白!本文主要总结网上一些朋友提供的 ascii,ISO-8859-1,unicode, utf8,gb2312,big5,gbk,gb18030等几种常区别.     1. ASC...

把网页发送到桌面代码

把网页发送到桌面相信很多站长都会用到,可有的站长可能不会写,今天碎碎就给大家分享下把网页发送到桌面php和asp良种语言的代码。   首先我们先做准备工作,要先上传自己网站的ioc文件,这样发送到桌面的时候才会有图标显示。   然后新建一个以shorturl命名的php文件把下面的代码放上去 <?php $Shortcut = "[InternetS...

Soap流程

首先本文不对SOAP有过多的解释,你只需知道它是--简单对象访问协议,一种轻量的、简单的、基于 XML 的协议。举个例子,WebService其实就基于SOAP的。 再简单的说一下,SOAP就是打包-->发送-->收包-->处理-->返回包等一系列流程,在ASP.NET中可以使用MSXML2中的XMLHTTPClass类来创建SOA...

Axja(2) post()和get()方法

  load()方法是局部方法,因为他需要一个包含元素的jQuery 对象作为前缀。而$.get()和$.post()是全局方法,无须指定某个元素。对于用途而言,.load()适合做静态文件的异步获取,而对于需要传递参数到服务器页面的,$.get()和$.post()更加合适。 jQuery.post(url, [data], [callback], [t...