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)相对应。 ?
详细解决方案
Javascript的URL编码有关问题
热度:252 发布时间:2012-09-25 09:55:58.0
相关解决方案
- javascript ie6兼容的有关问题
- javascript window open在ie中设立不起作用,求解决
- javascript 字符串拼接效率有关问题
- JavaScript 自动生成图片并合并有关问题
- 不走"<script type='text/javascript'>"标签咋回事
- <script type="javascript/text">的有关问题
- 用servlet+jsp+javascript+jdbc做个简单的办公自动化系统流程,该如何解决
- 怎么打开 javascript:SetData(2010,5,10)
- javaScript = == ===区别,该怎么解决
- javascript 怎么验证name=xx.xx的radio表单
- form action 和 javascript 的提交問題解决方法
- javascript,该怎么处理
- javascript,该如何处理
- javascript 选中文字 但是保存样式 标签
- 新人求问,J2EE方向,html,css,javascript,vml要学到什么程度?解决思路
- javascript 请求servlet兑现将函数中定义的变量作为参数
- javascript 不懂,该如何处理
- javascript 不懂解决方法
- JavaScript 大局函数求实例,高分求
- javaScript 里面 如何知道Object 对象的长度
- javascript 函数调用有什么有关问题,请
- javascript 中文本框中数字如何比较
- javascript IE通过,火狐,google浏览器不过解决思路
- javascript rsa加密/java使用Cipher.getInstance("RSA/ECB/PKCS1Padding")解密,该如何处理
- IE javascript start()函数解决方案
- 关于RTMP 播放器(DELPHI C# FLASH JAVASCRIPT)解决思路
- Chrome Javascript Click 事件,该如何解决
- javascript 实出_blank跳转到新标签页有关问题
- 分享上Google Maps Javascript API v3
- javascript 绑定服务器控件 事件,该如何解决