Javascript的URL编码问题。
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)
淘宝用的框架是WEBX,WebX中会把所有的参数按配置进行一次解码,淘宝大多应用系统都是GBK的编码,所以会存在Javascript编码后传给服务端拿到的是错误的编码。原因:
JavascriptAjax请求时:encodeURIComponent()后UTF-8编码WebX以GBK编码解码出错。解决: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端是解码不开的,并且我们在服务端用JAVA的HttpRequest.getParameter(name)接口取出来时候拿不到“%u7EA4%u5C18yoyo”原样的字符串,Java会自动处理掉这个拿到是:“EA4C18yoyo”,无论怎样也还原不成“纤尘yoyo”。并且我们现在又不能不老的亮灯全部找出来修改成encodeURIComponent(stringvalue)方法。
解决方法:
1、 用HttpRequest. getQueryString()拿到所有的求情的参数查询串。
2、 自己写一个JAVA的方法实现 和javascript的unescape(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()方法返回一个已编码的 URI。encodeURIComponent方法对所有的字符编码,请注意,如果该字符串代表一个路径,例如:“/淘宝/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)相对应。
相关推荐
在实际编程中,大多数编程语言都提供了内置函数来自动进行URL编码和解码,如JavaScript的`encodeURIComponent()`和`decodeURIComponent()`,Python的`urllib.parse.quote()`和`urllib.parse.unquote()`等。...
通过了解URL编码的基础知识以及使用JavaScript内置函数的具体操作方法,可以帮助开发者更好地处理Web应用中的中文字符问题。此外,还讨论了处理更多特殊字符的情况,这对于国际化应用程序来说尤为重要。掌握这些技巧...
2. **URL编码**:JavaScript的`encodeURIComponent`函数可以对字符串进行URL编码,但默认它只处理UTF-8编码。为了GBK编码的字符串能正确编码,需要先将GBK编码后的字节序列转换为 `%xx` 形式,这可以通过遍历字节...
使用“url编码转换器”这样的工具,用户可以便捷地处理URL中的编码问题,无论是手动输入的链接还是程序生成的链接,都能确保其在传输过程中不会因为特殊字符而引起问题。在开发网页应用或者处理HTTP请求时,理解并...
JavaScript 对 URL 编码解码 JavaScript 中对 URL 编码和解码涉及到六个函数:escape、encodeURI、encodeURIComponent、unescape、decodeURI 和 decodeURIComponent。这六个函数的使用场景和特点分别是: escape ...
为了解决这个问题,URL编码应运而生。这个名为“一个简单url编码解码”的项目,就是为新手提供了一个理解和实践URL编码与解码机制的实例。 URL编码是根据RFC 3986标准进行的,主要使用百分号(%)表示非ASCII字符或...
2. encodeURI()是javascript中真正用来对URL编码的函数。编码整个URL地址,但对特殊含义的符号”;/?:@&=+$,#”,也不进行编码。对应的解码函数是decodeURI()。 3. encodeURIComponent()能编码”;/?:@&=+$,#”这些...
所以就自己写了一个JavaScript脚本 进行URL编码。原理就是先把unicode字符串转换成BASE64编码文本。然后把base64文本传递到js脚本里面的一个函数内。js函数把base64编码还原成unicode的数据 然后直接调用URL编码...
URL编码是将URL中可能引起问题的字符转换为ASCII字符集的等效百分号编码。这包括空格、非ASCII字符以及某些特殊字符,如大括号、引号、尖括号等。例如,空格通常被转换为"%20"。这是因为URL不能包含某些字符,比如...
URL编码(URL Encoding)是互联网应用中常见的数据处理方式,主要目的是为了确保非ASCII字符或者特殊字符在HTTP请求中能够正确...通过"URL编码解码器"这样的工具,开发者可以更方便地处理这些细节问题,提高工作效率。
例如,Apache Commons Lang库提供了`StringEscapeUtils`类,用于对字符串进行编码和解码,包括URL编码。此外,Java的`java.net.URLDecoder`和`java.net.URLEncoder`类也提供了URL编码和解码的功能。 文件的编码方式...
1. **编程语言内置函数**:在大多数编程语言中,如Java、Python、JavaScript,都有内置的函数来处理URL编码和解码,例如JavaScript的 `encodeURIComponent()` 和 `decodeURIComponent()` 函数。 2. **在线工具**:...
在IT行业中,URL编码(又称为百分号编码)是一种用于在网络应用中表示非ASCII字符或特殊字符的标准。这种编码方式是HTTP协议的一部分,确保数据可以在URL中安全传输。本话题将详细探讨“url编码解码源代码”,以及...
在实际操作中,开发者通常会使用编程语言提供的内置函数进行URL编码和解码,例如JavaScript的`encodeURIComponent()`和`decodeURIComponent()`,Python的`urllib.parse.quote()`和`urllib.parse.unquote()`,Java的`...
总之,"codeURL编码解码工具"是理解并处理URL编码问题的关键工具,它简化了编码和解码的过程,帮助我们确保URL的有效性和安全性。在日常开发工作中,熟练掌握这类工具的使用方法,将使我们的工作变得更加轻松。
8. **安全考量**:URL编码也可以用于防止跨站脚本攻击(XSS),通过编码恶意输入,可以避免这些输入被浏览器错误解析为HTML或JavaScript代码,从而提高应用的安全性。 总结起来,URL编码解码是网络通信的基础,对于...
URL编码的主要目的是确保数据在通过网络传输时能够正确解析,不会因为特殊字符导致问题。在网页表单提交、链接重定向或数据查询字符串中,URL编码是至关重要的。例如,如果你在一个搜索框输入包含空格的关键词,...
URL编码是一种在网络应用中将特殊字符转换为安全的ASCII字符序列的过程,以确保URL的正确传输和解析。URL,全称Uniform Resource Locator,是统一资源定位符,是互联网上资源的唯一地址。实际上,URL是URI(统一资源...