Javascript的URL编码问题

JavascriptURL编码问题。

Javascript的常用的编码方式:

encodeURIComponent(stringvalue)decodeURIComponent(stringvalue)

encodeURI(stringvalue)decodeURI(stringvalue)

escape(stringvalue) unescape(stringvalue)

现在escape(stringvalue) unescape(stringvalue)已经从ECMAScript v3 已从标准中删除了 ,并反对使用它,因此应该用 decodeURI() decodeURIComponent() 取而代之。

 

Java的编码解码:

URLEncoder.encode(stringvalue,"UTF-8")

对应

encodeURIComponent(stringvalue)

Java解码

URLDecoder.decode(stringvalue,"UTF-8")

对应

decodeURIComponent(stringvalue)

 

淘宝用的框架是WEBXWebX中会把所有的参数按配置进行一次解码,淘宝大多应用系统都是GBK的编码,所以会存在Javascript编码后传给服务端拿到的是错误的编码。原因:

JavascriptAjax请求时:encodeURIComponent()UTF-8编码WebXGBK编码解码出错。解决:encodeURIComponent(encodeURIComponent(stringvalue))两次编码后传送到服务端,WEBX解码后是正常的UTF-8编码的字符串,在用URLDecoder.decode(stringvalue,"UTF-8")进行一次解码得到最后正确编码的汉字。这个在WEB旺旺和阿里云的旺旺服务器的聊天记录的查看是这样的做的。

原来还有很多遗留的系统的前端JS用的escape(stringvalue) unescape(stringvalue)进行的编码的解码。像老得旺旺的亮灯就是这样子做的 ,如:URL

http://webwwtb.im.alisoft.com/wangwang/ww1.htm?t=1293428880513&uid=&tid=%u7EA4%u5C18yoyo

这个URL中:“%u7EA4%u5C18yoyo”(纤尘yoyo)是用escape(stringvalue)进行编码的这个编码在JAVA端是解码不开的,并且我们在服务端用JAVAHttpRequest.getParameter(name)接口取出来时候拿不到“%u7EA4%u5C18yoyo”原样的字符串,Java会自动处理掉这个拿到是:“EA4C18yoyo”,无论怎样也还原不成“纤尘yoyo”。并且我们现在又不能不老的亮灯全部找出来修改成encodeURIComponent(stringvalue)方法。

解决方法:

1、 HttpRequest. getQueryString()拿到所有的求情的参数查询串。

2、 自己写一个JAVA的方法实现 javascriptunescape(stringvalue)的解码方式一样的解码功能。

 

注意:在写前端代码时候一定不要用escape(stringvalue) unescape(stringvalue),用了这两个方法在和服务端交互的时候会产生无法预知的编码错误。建议用:encodeURIComponent(stringvalue)decodeURIComponent(stringvalue)

 

附上javascript的三对编码解码的函数的介绍,附件是Java实现的escape(stringvalue) unescape(stringvalue)

 

encodeURIComponent(stringvalue)方法

将文本字符串编码为一个统一资源标识符 (URI) 的一个有效组件。

function encodeURIComponent(stringvalue):String

 

必选:stringvalue参数代表一个已编码的 URI 组件。

说明:

encodeURIComponen()方法返回一个已编码的 URIencodeURIComponent方法对所有的字符编码,请注意,如果该字符串代表一个路径,例如:“/淘宝/index.html”编码后:“%2F%E6%B7%98%E5%AE%9D%2Findex.html”,其中的斜杠也将被编码。这样一来,当该编码结果被作为请求发送到 web 服务器时将是无效的。如果字符串中包含不止一个 URI 组件,请使用encodeURI方法进行编码。

 

 

encodeURI(stringvalue)方法

返回编码为有效的统一资源标识符 (URI) 的字符串。

 

function encodeURI(stringvalue: String) : String

参数

Stringvalue

必选:表示编码 URI 的字符串。

说明:

encodeURI 方法返回一个已编码的 URI。如果将编码结果传递给 decodeURI,则将返回初始的字符串。encodeURI 不对下列字符进行编码:“:”、“/”、“;”和“?”。请使用 encodeURIComponent 对这些字符进行编码。例如:“/淘宝/index.html”编码后是:“/%E6%B7%98%E5%AE%9D/default.html”。

URL最好自己拼接,用encodeURIComponent(stringvalue)编码

 

 

 

escape(stringvalue) 方法

返回一个可在所有计算机上读取的编码 String 对象。

 

function escape(stringvalue: String) : String

参数

stringvalue

必选。要编码的任何 String 对象或文本。

说明:

escape(strinvalue) 方法返回一个包含 stringvalue内容的字符串值(Unicode 格式)。所有空格、标点、重音符号以及任何其他非 ASCII 字符都用 %xx 编码替换,其中 xx 等于表示该字符的十六进制数。例如,空格编码为“%20”, “/淘宝/index.html”编码为“/%u6DD8%u5B9D/default.html”。

字符值大于 255 的字符以 %uxxxx 格式存储。

注意:escape 方法不能用来对“统一资源标识符”(URI) 进行编码。对其编码应使用 encodeURI encodeURIComponent 方法。

 

 

decodeURI(stringvalue) 方法

返回一个已编码的统一资源标识符 (URI) 的非编码形式。

function decodeURI(stringvalue: String) : String

参数

stringvalue

必选。表示编码 URI 的字符串。

说明

decodeURI(stringvalue) 方法返回一个非编码形式字符串值,和encodeURI(strinvalue)相对应。如果strinvalue无效,将发生 URIError

 

 

decodeURIComponent(strinvalue) 方法

返回统一资源标识符 (URI) 的一个已编码组件的非编码形式。

 

function decodeURIComponent(stringvalue : String) : String

必选的strinvalue参数是一个表示已编码的 URI 组件的值。

说明:

stringvalue是一个完整的 URI 的一部分,这个方法和encodeURIComponent(stringvalue)方法对应。如果 strinvalue无效,则将产生 URIError

 

unescape (stringvalue) 方法

返回一个已编码的统一资源标识符 (URI) 的非编码形式。

function unescape (stringvalue: String) : String

参数

stringvalue

必选。表示编码 URI 的字符串。

说明

unescape(stringvalue) 方法返回一个非编码形式字符串值,和escape (strinvalue)相对应。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值