学而实习之 不亦乐乎

URLEncode 算法原理

2023-12-28 22:14:42

URL在定义时,定义为只支持 ASCII 字符,所以 URL 的发送方与接收方都只能处理 ASCII 字符。所以当你的URL中有非 ASCII 字符时就需要编码转换。

在 Web 程序中进行 URL 请求时,常会遇到 URL 中含有特殊字符的问题,常见的特殊字符有 " ?$&*@" 等字符,或者是中文,就要对URL进行编码,用 URLEncode 替换掉这些特殊字符。

一、URLEncode 规则

1、将空格转换为加号(+)

2、对0-9、a-z、A-Z之间的字符保持不变

3、对于所有其他的字符,用这个字符的当前当前字符集编码在内存中的十六进制格式表示,并在每一个字节前加上一个百分号(%),如字符“+”是用%2B表示,字符“=”用%3D表示,字符“&”用%26表示,每个中文字符在内存中占两个字节,字符“中”用%D6%D0表示,字符“国”用%B9%FA表示。

4、空格也可以直接用其十六进制编码方式,即用%20表示,而不是将它转换为加号(+)。

二、特殊字符

+   %2B
=   %3D
#   %23
....    ...

三、使用URLEncode原因

  1. 字符串数据以url的形式传递给web服务器时,字符串中是不允许出现空格和特殊字符的
  2. 因为 url 对字符有限制,比如把一个邮箱放入 url,就需要使用 urlencode 函数,因为 url 中不能包含 @ 字符
  3. url转义其实也只是为了符合url的规范而已。因为在标准的url规范中中文和很多的字符是不允许出现在url中的。(主要就是消除服务器解析url时的歧义)