`
zhoujm
  • 浏览: 11130 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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)相对应。

 

分享到:
评论

相关推荐

    javascript url几种编码方式详解

    2. encodeURI()是javascript中真正用来对URL编码的函数。编码整个URL地址,但对特殊含义的符号”;/?:@&=+$,#”,也不进行编码。对应的解码函数是decodeURI()。 3. encodeURIComponent()能编码”;/?:@&=+$,#”这些...

    unicode格式的字符串进行URL编码

    所以就自己写了一个JavaScript脚本 进行URL编码。原理就是先把unicode字符串转换成BASE64编码文本。然后把base64文本传递到js脚本里面的一个函数内。js函数把base64编码还原成unicode的数据 然后直接调用URL编码...

    纯Javascript脚本实现GBK URL编解码

    纯 Javascript 脚本实现 GBK URL 编码和解码

    javascript 对url编码 解码

    js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponen

    【JavaScript源代码】基于网址URL中特殊字符转义编码.docx

    为什么需要Url编码 哪些字符需要编码 US-ASCII字符集中没有对应的可打印字符 保留字符 不安全字符 如何对Url中的非法字符进行编码 Javascript中的escape,encodeURI和encodeURIComponent的区别 安全字符不同 兼容性...

    Delphi Base64编码,javascript解码汉字乱码解决方法演示程序(源代码)

    解决思路:进行Base64前先进行URL编码,在进行URL编码的时候,注意设置不需要SpaceAsPlus选项。 javascript代码: let decodedData = window.atob(JSONStr); let decodedData1 = decodeURIComponent(decodedData)...

    JavaScript中URL编码函数代码

    以下是对变量值的URL编码总结 : 建议用encodeURIComponent() , GET 和POST方式都可以发送过去 。 JavaScript中存在几种对URL字符串进行编码的方法:escape(),encodeURI(),以及encodeURIComponent()。这几种编码...

    javascript URL编码和解码使用说明

    使用服务器端的urlEncode函数编码的URL,与使用客户端javascript的 encodeURI函数编码的URL,结果就不一样。 javaScript中的编码方法: escape() 方法: 采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、...

    GB18030汉字的GB18030 Unicode URL编码对照表.xlsx

    目前大部分的网站,都是使用的UTF-8编码。例如发送一段二进制到服务器时,服务器规定该二进制内容的编码...附件是GB18030包含的21004个汉字的GB18030编码、Unicode编码、URL编码对照表,可用于解决中文乱码转换恢复。

    易语言-unicode格式的字符串进行URL编码

    所以就自己写了一个JavaScript脚本 进行URL编码 原理就是先把unicode字符串转换成BASE64编码文本 然后把base64文本传递到js脚本里面的一个函数内 js函数把base64编码还原成unicode的数据 然后直接调用URL编码函数对...

    javaScript处理URL中特殊符号的处理

    有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。编码的格式为:%加字符的ASCII码,即一个百分号%,

    js实现GBK编码,避免默认utf-8编码

    前端页面通过ajax发送请求,参数都是默认使用utf-8编码格式对参数进行url编码,这样的后果就是,当后台页面如果使用gbk编码的话,会出现乱码的情况,然后网上找到一个大神写的gbk.js. 但是里面没有做出详细介绍,这里...

    compressor:Javascript有效编码,将数字编码到Base64 URL

    将Javascript数字有效编码到Base64 URL介绍Compressor是用于数字数组的Javascript编码器/解码器。 它将数字编码为有效的字符串。输入[ 5 , 0 , 5 , 6 , 3 , 4 , 5 , 0 , 5 , 6 ] ;输出"Coucou" ; Compressor可以编码...

    postman-url-encoder:根据WHATWG规范实现URL编码

    邮递员URL编码器 邮递员URL编码器是一个NodeJS模块,提供了各种与URL编码相关的API。 创建该模块是为了实现以消除跨Postman系统对Node URL API的依赖。 这些API可用于编码URL的不同部分(例如主机名,路径,查询)...

    Javascript UrlDecode函数代码

    将Url进行编码,前台JS需要使用这段内容,这时候就需要解码了

    Javascript中的几种URL编码方法比较

    主要介绍了Javascript中的几种URL编码方法比较,本文对比了escape()、encodeURI()以及encodeURIComponent()这3种URL编码方法,需要的朋友可以参考下

    JavaScript、C# URL编码、解码总结

    主要介绍了JavaScript、C# URL编码总结,注意包括了encodeURI、decodeURI、encodeURIComponent、decodeURIComponent等使用需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics