URL编码

作者: 随风_d6a2 | 来源:发表于2023-08-02 22:20 被阅读0次

    当 URL 路径,或者查询参数中带有中文、特殊字符的时候,就需要对 URL 进行编码(采用十六进制编码格式)。URL 编码的原则是使用安全字符(即没有特殊用途或者特殊意义的字符)去表示那些不安全的字符。

    为什么需要URL编码

    URL 之所以需要编码,是因为 URL 中的某些字符会引起歧义,比如若 URL 查询参数中包含”&”或者”%”就会造成服务器解析错误,再比如,URL 的编码格式采用的是 ASCII 码而非 Unicode,这表明 URL 中不允许包含任何非 ASCII 字符(比如中文),否则就会造成 URL 解析错误。

    URL基本组成

    一个 URL 的基本组件包括协议、域名、端口号、路径和查询字符串,其中路径和查询字符串之间使用问号?隔离,示例如下:

    http://www.biancheng.net/index?param=10
    

    其中域名为 http://www.biancheng.net,路径为 index,查询字符串为 param=1。

    URL 中规定了一些字符(:/ ? # [ ] @)用来分隔不同的 URL 组件,这些字符被称为保留字符。例如:

    • 冒号:用于分隔协议和主机组件,斜杠用于分隔主机和路径
    • 问号:用于分隔路径和查询参数等。

    还有一些保留字符(! $ & * + , ; =)起到分割 URL 不同组件的作用,比如:

    • =用于表示查询参数中的键值对
    • &符号用于分隔查询多个键值对。

    哪些字符需要编码

    URL 编码协议规定(即 RFC3986 协议):URL 中只允许包含英文字母、数字、以及这 4 个 - _ . ~ 特殊字符和所有的保留字符。协议中规定了以下保留字符:

    ! * ’ ( ) ; : @ & = + $ , / ? # [ ]
    

    但是当组件中的普通数据包含这些特殊字符时,它们就变成了不安全字符,此时就需要对其进行编码处理。比如查询字符串中包含了特殊字符:

    http://www.biancheng.net/index?param=10*&param1=20*
    

    下表列出了一些 URL 特殊字符及其编码:

    为了让您思路更清晰,下面简单总结一下,哪些字符需要编码。主要分为以下三种情况:

    • ASCII 表中没有对应可显示字符的,例如汉字。
    • 不安全字符,包括:# ”% <> [] {} | \ ^ ` ~ 。
    • 不当做保留字符来使用的保留字符,即& / : ; = ? @ 。

    URL在线编码解码

    通过浏览器可以搜索到许多在线 URL 编码解码工具,比如编码转换工具(点击访问),这些工具能够很方便的实现 URL 的编码与解码。示例如下:

    编码前: http://www.biancheng.net/s?ie=utf-8&f=8&tn=baidu&wd=hell 编程帮
    编码后: http://www.biancheng.net/s?ie=utf-8&f=8&tn=baidu&wd=hell%20%B1%E0%B3%CC%B0

    在我们编写爬虫程序的过程中,需要处理各式各样的 URL,因此学习本节内容有助于您掌握处理 URL 的知识。

    原文:
    知乎
    https://zhuanlan.zhihu.com/p/436553237

    相关文章

      网友评论

        本文标题:URL编码

        本文链接:https://www.haomeiwen.com/subject/ejgppdtx.html