📜  HTTP-URL编码(1)

📅  最后修改于: 2023-12-03 15:15:45.241000             🧑  作者: Mango

HTTP URL 编码

HTTP URL 编码是一种将特殊字符转换为可传输字符的方式。在将特殊字符包含在 URL 参数和路径中时,需要 URL 编码。本文将介绍 HTTP URL 编码的重要性、常见用途,以及如何在常见编程语言中进行编码和解码操作。

为什么需要 HTTP URL 编码?

在发送 HTTP 请求时,URL 参数和路径中可能包含多种特殊字符(例如,空格、中文字符、#、&、/ 等),如果不进行编码,那么可能会出现以下问题:

  • 部分字符会被浏览器或服务器解析成其他意义,导致请求失败或获取不到正确的数据;
  • 一些字符可能会被浏览器或服务器忽略,导致 URL 参数或路径不完整;
  • 部分字符可能会改变 URL 的意义,从而导致意外的请求或数据泄露等安全问题。

因此,HTTP URL 编码是确保发送的 URL 正确解析和传输的关键。

常见的 HTTP URL 编码用途

最常见的 HTTP URL 编码用途是在 GET 请求的 URL 参数中传递数据。比如,我们要将名称为“张三”的用户 ID 通过 GET 请求传递给服务器,那么可以这样编码:

http://example.com/api?uid=%E5%BC%A0%E4%B8%89

上面的 URL 中,使用了 UTF-8 编码方式对“张三”进行了 URL 编码,转换成了%E5%BC%A0%E4%B8%89。

除了 URL 参数外,HTTP URL 编码还经常用于 URL 路径、Cookie、网页表单等传输方式中。

HTTP URL 编码规则

HTTP URL 编码规则主要包括两部分:

  1. 将 ASCII 码不包括数字和字母以外的字符(比如空格、#、$、&、+ 等)转换成 “%” 符号后加上两位十六进制数;

  2. 将 UTF-8 编码的字符转换成 “%” 符号后加上三位十六进制数。

比如,将字符串“hello#world”进行 HTTP URL 编码后,结果为“hello%23world”;将字符串“你好,世界”进行 HTTP URL 编码后,结果为“%E4%BD%A0%E5%A5%BD%EF%BC%8C%E4%B8%96%E7%95%8C”。

编码和解码操作示例
在 JavaScript 中进行编码和解码操作

在 JavaScript 中,可以使用 encodeURIComponent() 函数对字符串进行 URL 编码,使用 decodeURIComponent() 函数对 URL 编码后的字符串进行解码。示例代码如下:

let str = "hello#world";
let encoded = encodeURIComponent(str);
let decoded = decodeURIComponent(encoded);
console.log(encoded); // 输出 "hello%23world"
console.log(decoded); // 输出 "hello#world"
在 Python 中进行编码和解码操作

在 Python 中,可以使用 urllib.parse.quote() 函数对字符串进行 URL 编码,使用 urllib.parse.unquote() 函数对 URL 编码后的字符串进行解码。示例代码如下:

import urllib.parse

str = "hello#world"
encoded = urllib.parse.quote(str)
decoded = urllib.parse.unquote(encoded)
print(encoded) # 输出 "hello%23world"
print(decoded) # 输出 "hello#world"
在 PHP 中进行编码和解码操作

在 PHP 中,可以使用 urlencode() 函数对字符串进行 URL 编码,使用 urldecode() 函数对 URL 编码后的字符串进行解码。示例代码如下:

$str = "hello#world";
$encoded = urlencode($str);
$decoded = urldecode($encoded);
echo $encoded; // 输出 "hello%23world"
echo $decoded; // 输出 "hello#world"
总结

HTTP URL 编码是保证 URL 正确解析和传输的必要手段。本文介绍了 HTTP URL 编码的重要性、常见用途和编码规则,并在 JavaScript、Python 和 PHP 中给出了编码和解码的操作示例。