一.js的三个函数escape,encodeURI,encodeURIComponent区别.
js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent
1、 传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。
例如:<script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7&u='+encodeURIComponent ("http://cang.baidu.com/bruce42")+'">退出</a>');</script>
2、 进行url跳转时可以整体使用encodeURI
例如:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");
3、 js使用数据时可以使用escape
[Huoho.Com编辑]
例如:搜藏中history纪录。
4、 escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。
最多使用的应为encodeURIComponent,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支持(form中的编码方式和当前页面编码方式相同)
escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
二,url编码
浏览器 1、GET方式提交,浏览器会对URL进行URL encode,然后发送给服务器。 (1) 对于中文IE,如果在高级选项中选中总以UTF-8发送(默认方式),则PathInfo是URL Encode是按照UTF-8编码,QueryString是按照GBK编码。 http://localhost:8080/example/中国?name=中国实际上提交是: GET /example/%E4%B8%AD%E5%9B%BD?name=%D6%D0%B9%FA
(1) 对于中文IE,如果在高级选项中取消总以UTF-8发送,则PathInfo和QueryString是URL encode按照GBK编码。实际上提交是: GET /example/%D6%D0%B9%FA?name=%D6%D0%B9%FA
(3) 对于中文firefox,则pathInfo和queryString都是URL encode按照GBK编码。实际上提交是: GET /example/%D6%D0%B9%FA?name=%D6%D0%B9%FA
很显然,不同的浏览器以及同一浏览器的不同设置,会影响最终URL中PathInfo的编码。对于中文的IE和FIREFOX都是采用GBK编码QueryString。
小结:解决方案: 1、URL中如果含有中文等非ASCII字符,则浏览器会对它们进行URLEncode。为了避免浏览器采用了我们不希望的编码,所以最好不要在URL中直接使用非ASCII字符,而采用URL Encode编码过的字符串%. 比如: URL:http://localhost:8080/example/中国?name=中国建议: URL:http://localhost:8080/example/%D6%D0%B9%FA?name=%D6%D0%B9%FA
2、我们建议URL中PathInfo和QueryString采用相同的编码,这样对服务器端处理的时候会更加简单。
3.URL中的PathInfo和QueryString字符串的编码和解码是由浏览器和应用服务器的配置决定的,我们的程序不能设置,不要期望用 request.setCharacterEncoding()方法能设置URL中参数值解码时的字符集。所以我们建议URL中不要使用中文等非 ASCII字符,如果含有非ASCII字符的话要使用URLEncode编码一下,比如: http://localhost:8080/example1/example/中国正确的写法: http://localhost:8080/example1/example/%E4%B8%AD%E5%9B%BD 并且我们建议URL中不要在PathInfo和QueryString同时使用非ASCII字符,比如 http://localhost:8080/example1/example/中国?name=中国原因很简单:不同浏览器对URL中 PathInfo和QueryString编码时采用的字符集不同,但应用服务器对URL通常会采用相同的字符集来解码。
4.我们建议URL中的URL Encode编码的字符集和网页的contentType的字符集采用相同的字符集,这样程序的实现就很简单,不用做复杂的编码转换。
三.base64 & base32编码
以上两种方式都是用字符数字串来表示特殊字符的方式.
Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。以3个字节为一组。按顺序排列24 位数据,再把这24位数据分成4组,即每组6位。再在每组的的最高位前补两个0凑足一个字节。这样就把一个3字节为一组的数据重新编码成了4个字节。当所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节。这时在最后一组填充1到2个0字节。并在最后编码完成后在结尾添加1到2个 “=”。
例:将对ABC进行BASE64编码
首先取ABC对应的ASCII码值。A(65)B(66)C(67)。
再取二进制值A(01000001)B(01000010)C(01000011),然后把这三个字节的二进制码接起来(010000010100001001000011),再以6位为单位分成4个数据块并在最高位填充两个0后形成4个字节的编码后的值(00010000)(00010100)(00001001)(00000011)。蓝色部分为真实数据。再把这四个字节数据转化成10进制数得(16)(20)(19)(3)。最后根据BASE64给出的64个基本字符表,查出对应的ASCII码字符(Q)(U)(J)(D)。这里的值实际就是数据在字符表中的索引。
注BASE64字符表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
问题是,base64中包括+号.这个在urlEncoding中代表空格.所以,将base64编码过的字符当作参数通过urlget的话.服务器那边会把+号urlDecode成空格.就出现问题了.
解决办法:自己修改base64的字符集,将+用RFC 2396.中指定的MARK的任何一个字符来代替:
MARK.set('-');
MARK.set('_');
MARK.set('.');
MARK.set('!');
MARK.set('~');
MARK.set('*');
MARK.set('\'');
MARK.set('(');
MARK.set(')');
.
或者自己外部encoding完毕replace,decoding前repalce.或者,base64后再进行urlEncoding.或者用base32来代替.也就是用a-z,0-9(部分)来处理.原理同base64.
分享到:
相关推荐
本文将深入探讨URL编码的原理、规则以及在实际应用中的重要性。 URL编码主要遵循以下规则: 1. 在URL中,非字母数字字符(即除了A-Z,a-z,0-9)和一些特殊字符如"-", "_", ".", "*", "~"之外的字符都需要被编码。...
通过了解URL编码的基础知识以及使用JavaScript内置函数的具体操作方法,可以帮助开发者更好地处理Web应用中的中文字符问题。此外,还讨论了处理更多特殊字符的情况,这对于国际化应用程序来说尤为重要。掌握这些技巧...
例如,Apache Commons Lang库提供了`StringEscapeUtils`类,用于对字符串进行编码和解码,包括URL编码。此外,Java的`java.net.URLDecoder`和`java.net.URLEncoder`类也提供了URL编码和解码的功能。 文件的编码方式...
总的来说,C++中处理URL编码和解码需要理解HTTP协议和相关标准,掌握基本的字符串操作技巧,以及可能涉及的字符集问题。通过自定义实现或利用现有库,我们可以方便地在C++程序中实现URL的编码和解码功能。
在编程中,处理包含中文或其他非英文字符的URL时,通常需要进行URL编码。这是因为URL只允许包含ASCII字符集中的字符,而GBK编码则包含了大量的非ASCII字符。为了在网络上传输这些非ASCII字符,我们需要将其转换为...
在开发网页应用或者处理HTTP请求时,理解并正确使用URL编码是至关重要的,可以避免各种因字符编码错误引发的404错误或其他通信问题。 在压缩包内的`code.exe`文件可能是这个url编码转换器的可执行程序,用户运行这...
标题和描述中提到的“vb url编码解码”是指在Visual Basic(VB)环境中进行URL编码和解码的过程。URL编码,也称为百分号编码,是一种用于将特殊字符转换为适用于URL格式的编码方式,目的是确保这些特殊字符能够正确...
本文将深入探讨URL编码与解码的概念,以及如何在编程中实现这些操作。 URL编码是将URL中可能引起问题的字符转换为ASCII字符集的等效百分号编码。这包括空格、非ASCII字符以及某些特殊字符,如大括号、引号、尖括号...
URL编码遵循一个简单的规则:对URL中的每个非字母数字字符(除ASCII字符集中A-Z、a-z、0-9、'-'、'.'、'_'、'~'外的字符),使用%加上该字符的ASCII值的十六进制表示。例如,空格字符 ' ' 的ASCII值为32,编码后的...
在IT领域,URL编码是一种常见的数据处理技术,特别是在网络编程中。这个压缩包文件的标题和描述提及了“url加密”和“URL编码”,实际上,它们指的是同一个概念,即URL编码(URL Encoding)。URL编码是根据统一资源...
本文将深入探讨“C#自动识别URL编码”的主题,帮助开发者解决URL编码带来的乱码问题。 URL编码,也称为百分号编码(Percent-encoding),是统一资源定位符(Uniform Resource Locator, URL)的一部分,用于在非...
1. **URL编码原理**:理解哪些字符需要编码,以及如何使用百分号表示这些字符的十六进制值。编码通常应用于查询字符串、路径部分以及URL中的其他特殊字符。 2. **编码函数实现**:编写一个函数,接受一个包含特殊...
标题中的“URL编码解码小程序”指的是一个工具或软件,其主要功能是处理URL(统一资源定位符)中的编码问题。URL编码是互联网通信中的一种标准化机制,它确保非ASCII字符或特殊字符在URL中能被正确传输和解析。这是...
URL编码是互联网上的一种标准编码方式,用于将特殊字符转换为可安全传递的ASCII字符串,以便在URL(统一资源定位符)中使用。这个“URL编码转换工具”就是专门为了帮助开发者解决这个问题而设计的。它能够将URL中的...
本文将深入探讨URL编码转换的相关概念、应用场景以及一个具体的C/C++实现示例。 #### 一、URL编码的基本概念 URL编码(也称为百分号编码)是一种用于表示URL中特殊字符的标准方法。它主要用于确保所有字符都能通过...
自己写的,可能有bug,请大家一块学习 环境为PB12 函数(及参数) 作用 arraysort 对一维数组进行排序 decto 将十进制数字转成其它进制字符串 ...urlencode 将指定字符串以进行指定字符集url编码 涨价了,哈哈
自动判断URL编码的方法。URL中包含编码的中文的时候,程序获取queryString需要根据url的不同编码,采用不同的解码方式,RequestQueryString方法能够自动识别url是用UTF-8编码还是GB2312编码,从而自动获取争取的值。...
### URL编码表详解 #### 一、概述 URL编码(也称为百分号编码)是一种用于在URL中表示特殊字符的方法。这是因为URL中的某些字符在不同的上下文中可能具有特殊含义,例如空格、斜杠等。为了确保这些字符能正确地被...
URL编码遵循统一资源标识符(URI)的规则,其中最常用的是基于百分号(%)的编码方法。每个非ASCII或特殊字符会被替换为"%xy"的形式,其中xy是该字符在UTF-8编码中的两个字节的十六进制表示。例如,空格字符(ASCII...