JHHK

欢迎来到我的个人网站
行者常至 为者常成

百分号编码

目录

什么是百分号编码

URL编码(百分号编码)的原理主要是将URL中不安全或特殊的字符转换为可安全传输的格式。以下是编码过程的主要原理和步骤:

安全字符和不安全字符:
安全字符:字母(A-Z, a-z)、数字(0-9)、一些特定符号(如-、_、.、~)可以直接在URL中使用。
不安全字符:空格、#、&、?等在URL中具有特殊意义,可能导致歧义或错误,因此需要进行编码。

百分号编码:
不安全字符通过百分号(%)后接该字符的ASCII码的十六进制表示进行编码。
例如:字符“空格”的ASCII码是32,十六进制表示为20,所以空格被编码为%20。
中文字符会被转换为它们的UTF-8编码值,然后每个字节表示为%后跟两位十六进制数字。
例如:百度转换后是%E5%8D%8E%E4%B8%BA

编码过程:
遍历URL中的每个字符:
如果是安全字符,则保持不变。
如果是不安全字符,则用%加上该字符的十六进制ASCII码进行替换。

示例:
原始字符串:Hello World!
编码后的URL:Hello%20World%21

解码过程:
解码是将被编码的URL还原回原始字符串的过程,通常是查找%后面的两个十六进制数字,并将其转换回对应的字符。

为什么要编码?

URL最初设计是只支持ASCII码的,所以非ASCII码需要编码,比如中文。

比如
编码前:https://www.baidu.com/s?wd=百度
编码后:https://www.baidu.com/s?wd=%E5%8D%8E%E4%B8%BA
在URL编码中,中文字符会被转换为它们的UTF-8编码值,然后每个字节表示为%后跟两位十六进制数字。

URL中一旦出现了一些特殊字符(比如等号、空格),需要进行编码
比如
编码前:https://www.baidu.com/s?wd=web develop
编码后:https://www.baidu.com/s?wd=web%20develop
如果不进行编码develop会被丢弃

encodeURI和encodeURIComponent

encodeURI
适合编码整个URL,保留对URL有特殊意义的字符(如:、/、?等),避免破坏URL结构。
http://www.oschina.net/search?scope=bbs&q=C?&语言
编码后:http://www.oschina.net/search?scope=bbs&q=C%3F&%E8%AF%AD%E8%A8%80
C? 中的 ? 被编码为 %3F,因为它在查询字符串参数值中,需要避免与URL结构的问号混淆。

encodeURIComponent
会编码所有非字母数字的字符,所以只适合适合编码URL中的单个组件,一般用它来编码url中的querry参数
http://www.oschina.net/search?scope=bbs&q=C?&语言 编码后:http%3A%2F%2Fwww.oschina.net%2Fsearch%3Fscope%3Dbbs%26q%3DC%3F%26%E8%AF%AD%E8%A8%80

所以我们只对 C?&语言 这一部分使用encodeURIComponent进行编码,确保querry参数不会产生歧义。
http://www.oschina.net/search?scope=bbs&q=C%3F%26%E8%AF%AD%E8%A8%80

小技巧
在Chrom浏览器中输入网址并发出请求后,将地址栏中的URL复制到记事本中,可以看到URL编码(encodeURI)后的结果。


行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.