URLEncode原理(全网详解)

概念:

URLEncode是一种将特殊字符转换成百分号编码的方法,以便浏览器和服务器之间能够正确地处理它们。该方法会将某些字符替换为由 '%' 和其后面的两个十六进制数字所组成的编码。这些字符包括字母、数字、下划线、连字符、句点以及某些保留字符。

URLEncode的目的是将URL或者HTTP请求中的非ASCII字符编码成可以使用的ASCII字符,以保证正确传递和处理,例如将空格编码成"%20"、中文编码成"%E4%BD%A0%E5%A5%BD"等。通常在使用HTTP GET请求提交参数时,需要对参数进行URLEncode编码,以防止出现特殊字符导致的错误。

例如,浏览器中进行百度搜索“你好”时,链接地址会被自动编码:
(编码前)https://www.baidu.com/s?wd=你好
(编码后)https://www.baidu.com/s?wd=%E4%BD%A0%E5%A5%BD
出现以上情况是网络请求前,浏览器对请求URL进行了URL编码(URL Encoding)

URL编码(URL Encoding):也称作百分号编码(Percent Encoding), 是特定上下文的统一资源定位符 URL的编码机制。URL编码(URL Encoding)也适用于统一资源标志符(URI)的编码,同样用于 application/x-www-form-urlencoded MIME准备数据。

什么是URL

URL是为了 统一的命名网络中的一个资源(URL不是单单为了HTTP协议而定义的,而是网络上的所有的协议都可以使用)

为什么要URLEncode

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

在Web程序中进行URL请求时,常会遇到URL中含有特殊字符的问题,常见的特殊字符有 ?$&*@等字符,或者是中文。

遇到这种情况时,就要对URL进行编码,用一种规则替换掉这些特殊字符,这就是URLEncode
URLEncode 规则

  1. 1.将空格转换为加号(+)
  2. 2.对0-9、a-z、A-Z之间的字符保持不变
  3. 3.对于所有其他的字符,用这个字符的当前当前字符集编码在内存中的十六进制格式表示,并在每一个字节前加上一个百分号(%),如字符“+”是用%2B表示,字符“=”用%3D表示,字符“&”用%26表示,每个中文字符在内存中占两个字节,字符“中”用%D6%D0表示,字符“国”用%B9%FA表示。
  4. 4.空格也可以直接用其十六进制编码方式,即用%20表示,而不是将它转换为加号(+)。

特殊字符

特殊字符编码结果
+%2B
=%3D
#%23
.......

使用URLEncode原因

1、字符串数据以url的形式传递给web服务器时,字符串中是不允许出现空格和特殊字符的
2、因为 url 对字符有限制,比如把一个邮箱放入 url,就需要使用 urlencode 函数,因为 url 中不能包含 @ 字符
3、url转义其实也只是为了符合url的规范而已。因为在标准的url规范中中文和很多的字符是不允许出现在url中的。(主要就是消除服务器解析url时的奇异)
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Lua中没有内置的urlencode函数,但可以使用第三方库实现。以下是一个示例代码: ``` local url = require("socket.url") local encoded = url.escape("需要编码的字符串") ``` 其中,需要编码的字符串可以替换为任何需要进行URL编码的字符串。 ### 回答2: 在Lua中,有时候需要对URL进行编码以确保特殊字符不会干扰URL的有效性和正确性。在进行URL编码时,可以使用lua-http模块中的"urlencode"函数。 "urlencode"函数可以接受一个字符串作为输入,并返回对应的URL编码字符串。URL编码会将特殊字符转化为%HH的形式,其中HH表示特殊字符的ASCII码的十六进制表示。 下面是一个示例代码,展示了如何使用lua-http模块中的"urlencode"函数进行URL编码: ```lua local http = require("socket.http") local urlencode = require("socket.url").escape local original = "这是一个测试 URL" local encoded = urlencode(original) print("原始字符串:", original) print("URL编码后的字符串:", encoded) ``` 以上代码中,首先我们导入了http和url模块,然后定义了一个字符串"这是一个测试 URL"。接着,我们使用"urlencode"函数对该字符串进行URL编码,得到了编码后的字符串。最后,通过使用print函数,我们将原始字符串和URL编码后的字符串进行了输出。 在运行这段代码时,将会得到以下的输出结果: ``` 原始字符串: 这是一个测试 URL URL编码后的字符串: %E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E6%B5%8B%E8%AF%95%20URL ``` 从输出结果中可以看到,原始字符串被成功地进行了URL编码,其中特殊字符被转化为了%HH的形式,确保了URL的有效性和正确性。 这就是Lua中进行URL编码的方法。通过使用lua-http模块中的"urlencode"函数,我们可以方便地对URL进行编码,从而确保URL的正确性和有效性。 ### 回答3: Lua中没有内置的urlencode函数,但可以使用外部库来进行urlencode操作。 以下是使用Lua的lfs库和LuaSocket库来进行urlencode的示例代码: ```lua local socket = require("socket") local ltn12 = require("ltn12") -- urlencode函数 function urlencode(str) if type(str) == "string" then str = str:gsub("\n", "\r\n") str = str:gsub("([^%w-_.~])", function(c) return string.format("%%%02X", string.byte(c)) end) str = str:gsub(" ", "+") end return str end -- 要进行urlencode的字符串 local stringToEncode = "这是一个测试字符串" -- 进行urlencode操作 local encodedString = urlencode(stringToEncode) -- 输出urlencode后的结果 print("urlencode后的结果:", encodedString) ``` 以上代码中,我们通过自定义的urlencode函数来进行urlencode操作,该函数会将字符串中的特殊字符转换为URL编码形式。 在这个示例中,我们对字符串"这是一个测试字符串"进行urlencode操作,并将结果输出到控制台。 希望这个回答能够帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值