java encodeuri转码和解码_URI转码

一、 encodeURI来解决URL传递时的中文问题

1.前端:

var 

2.后端:

String 

二、特殊字符在传输过程中被转义编码( %+ASCII(16进制)码值 )

有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。例如 空格的编码值是"%20"。

如果不使用转义字符,这些编码就会当URL中定义的特殊字符处理

开发时有时服务端返回的json中包含url,url中可能含有一些特殊字符,这些特殊字符在传输的过程中可能会被转义成编码。这时候我们拿到手里要如何转换回去呢,先看下那些字符可能会被编码

271dcacdde242e792950107db08377d4.png

三、

做页面开发的时候有时候,会使用Javascript的escape(),encodeURIComponent(),encodeURI ()这三个函数进行URL编码,防止特殊字符接收不到。

1.使用encodeURLComponent传递参数

function 

2. 进行URL跳转的时候整体使用encodeURL

function 

3.js使用数据时可以用escape(个人用的比较多)编码功能比较强大

Javascript中的escape()是将中文按ISO-8859-1字符集进行URL编码的,那样通过 request.getParameter()是能直接获取到请求参数的,但后来的Javascript将escape()换成了Unicode字符集编 码,如此一来,在JSP和Servlet中就没法直接拿到请求参数了,而且此时的request获得的参数值都是空值,

四、

总结:URL编码转换函数:

escape() 不常用

encodeURI() 对整体URL编码 常用 不编码! @ # $ & ( ) = : / ; ? + 等符号

encodeURIComponent() 这种串不建议使用此编码http://www.oschina.net/search?scope=bbs

  1. escape() : 采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都会转化成%xx格式的字符编码(xx代表此字符在字符集表里编码的16进制数字)。比如,空格符的对应编码是%20。不会对ASCII字符和数字进行编码。不会被此方法编码的字符:@ * / +,反向编码函数:unescape()

2. encodeURI(): 把URI字符串采用UTF-8编码格式转化成escape格式的字符串。不会被此方法编码的字符:! @ # $ & ( ) = : / ; ? + ',反向编码函数:decodeURI()

var 

3. encodeURIComponent():把URI字符串采用URF-8编码格式转化成escape格式的字符串。与encodeURI相比,这个函数会将更多的字符进行编码,比如"/"等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个来进行编码。否则“/”字符被编码后将URL显示错误。不会被此方法编码的字符:! * ( ),反向编码函数:decodeURIComponent()

encodeURIComponent

.

TIPS: 浏览器不会自动转码

  1. PC浏览器,不会动URL中的参数、 cookie、 以及项目中显示的字符串,进行任何的自动转码。
  2. 有可能 我们的项目是UTF-8的,但是用户的浏览器编码设置 是其他的编码方式。可能会自动转码,待测试。

3. 多次编码,多次转码 涉及到用户名时

decodeURIComponent

解码多次一个不带%25(这是 %号的编码)的串时,多次解码结果是一样的。

decodeURIComponent

编码多次一个带空格的串 是会产生大量的%25的

encodeURIComponent

前端给后端传用户名串时,编码几次合理?

注意:

  1. 鉴于以上存在的问题,在服务端解码过程中,需要谨慎考虑各种场景下(包括前端、领域)的编解码方式、次数(夹杂BASE64编码)等因素进行解码
var  

在前端与后端传递数据时,会遇到这样一个问题,如果传递的字符串中含有特殊字符

如:+ 空格/ ? % & = #

如果不进行特殊处理,会发生数据丢失的现象。

例如:我在前端传入后端"aVUAAAACS+uJkta7" 但是后端接收的时候接收到的是

"aVUAAAACS uJkta7" ,特殊字符“+”丢失了。

解决的办法就是:

前端在传递之前,检查一下是否有特殊字符,如果有,进行一下转换编码操作。

例如:前端部分

var  

后端在接收字符串时,检查是否有编码的形式,如果有,进行解码。这样就完成了特殊字符的传递。

后端部分:

String 

这样id就成功完整地由前端传入后端了。

——————————————————————————————————————

decodeURI与decodeURIComponent区别

1. 概念:

URI: Uniform ResourceIdentifiers,通用资源标识符

Global对象的encodeURI()和encodeURIComponent()方法可以对URI进行编码,以便发送给浏览器。有效的URI中不能包含某些字符,例如空格。而这URI编码方法就可以对URI进行编码,它们用特殊的UTF-8编码替换所有无效的字 符,从而让浏览器能够接受和理解。

其中encodeURI()主要用于整个URI(例如,http://www.jxbh.cn/illegal value.htm),而encode-URIComponent()主要用于对URI中的某一段(例如前面URI中的illegal value.htm)进行编码。它们的主要区别在于,encodeURI()不会对本身属于URI的特殊字符进行编码,例如冒号、正斜杠、问号和井字号;而encodeURIComponent()则会对它发现的任何非标准字符进行编码。来看下面的例子:
var uri="http://www.jxbh.cn/illegal value.htm#start";
//”http: //http://www.jxbh.cn/illegal%20value .htm#s tart”
alert(encodeURI (uri)):
//”http% 3A%2F%2Fwww.jxbh.cn%2 Fillegal%2 0value. htm%23 start”
alert( encodaURIComponent (uri));

使用encodeURI()编码后的结果是除了空格之外的其他字符都原封不动,只有空格被替换成了%20。而encodeURIComponent()方法则会使用对应的编码替换所有非字母数字字符。这也正是可以对整个URI使用encodeURI(),而只能对附加在现有URI后面的字符串使用encodeURIComponent()的原因所在。一般来说,我们使用encodeURIComponent()方法的时候要比使用encodeURI()更多,因为在实践中更常见的是对查询字符串参数而不是对基础URL进行编码.

经我的观测,很多网站的cookie在进行编码的时候,是encodeURIComponent格式的,所以应该使用decodeURIComponent()进行解码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值