全面深度解析URL编码(URL解码方法过程)

全面深度解析URL编码(URL解码方法过程)

更新时间:2025-11-08 已阅读:185次 | 作者:潍坊网站建设

网站首页 >> 新闻资讯 >> 建站知识 >> 全面深度解析URL编码(URL解码方法过程)

URL 是Uniform Resource Locator 的缩写,统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。基本URL包含模式(或称协议)、服务器名称(或IP地址)、路径和文件名、参数,如“协议://授权/路径查询?参数”。

全面深度解析URL编码(URL解码方法过程)

全面深度解析URL编码(URL解码方法过程)

**URL 与 URI **

很多人会混淆这两个名词。

• URL:(Uniform/Universal Resource Locator 的缩写,统一资源定位符)。

• URI:(Uniform Resource Identifier 的缩写,统一资源标识符)。

全面深度解析URL编码(URL解码方法过程)

全面深度解析URL编码(URL解码方法过程)

对于URI, 具体的结构如下:

URI 属于 URL 更低层次的抽象,一种字符串文本标准。URL 是 URI 的一个子集。

URI 表示请求服务器的路径,定义这么一个资源。而 URL 同时说明要如何访问这个资源(http://)。

URL 百度百科[1]

1、URL 编码 - 从 到 %ff[2]

2、HTML特殊字符编码对照表[3]

1、为什么要编码转义

推荐阅读:字符编码:ASCII、Unicode 和 UTF-8 的区别[4]

世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号,不同的编码方式,解码出来就是乱码,造成数据传输和阅读的极大障碍。互联网的来临,必须要统一字符编码,Unicode(统一码、万国码、单一码)作为计算机科学领域里的一项业界标准应运而生。Unicode 是互联网统一的符号集,只规定了符号唯一的二进制代码值,却没有规定这个二进制代码应该如何存储。UTF-8是一种针对Unicode的可变长度字符编码,UTF-8用1到4个字节编码Unicode字符,在互联网上使用最广的一种 Unicode 的实现方式。其他实现方式还包括 UTF-16(字符用两个字节或四个字节表示)和 UTF-32(字符用四个字节表示),不过在互联网上基本不用。

注意:UTF-8 是 Unicode 的实现方式之一。

如 中 字:

• Unicode码值:\u4e2d

• URL编码(UTF-8):%e4%b8%ad

Url编码通常也被称为百分号编码,编码方式非常简单,使用%百分号加上两位的字符——0123456789ABCDEF——代表一个字节的十六进制形式。Url编码默认使用的字符集是US-ASCII。例如a在US-ASCII码中对应的字节是0x61,那么Url编码之后得到的就是%61,我们在地址栏上输入 http://g.cn/search?q=%61%62%63 ,实际上就等同于在google上搜索abc了。又如@符号在ASCII字符集中对应的字节为0x40,经过Url编码之后得到的是%40。

对于非ASCII字符,需要使用ASCII字符集的超集进行编码得到相应的字节,然后对每个字节执行百分号编码。对于Unicode字符,RFC文档建议使用utf-8对其进行编码得到相应的字节,然后对每个字节执行百分号编码。如"中文"使用UTF-8字符集得到的字节为0xE4 0xB8 0xAD 0xE6 0x96 0x87,经过Url编码之后得到"%E4%B8%AD%E6%96%87"。

HTTP URL 使用的RFC3986编码规范,RFC3986文档规定,URL中只允许包含以下四种:

1、英文字母(a-z A-Z)

2、数字(0-9)

3、-_.~ 4个特殊字符

4、所有保留字符,RFC3986中指定了以下字符为保留字符(英文字符):

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

5、编码标记符号 %

URL 编码使用 "%" 其后跟随两位的十六进制数来替换非 ASCII 的字符,中文是三个编码组合。十六进制格式用于在浏览器和插件中显示非标准的字母和字符。

Url编码的原则就是使用安全的字符(没有特殊用途或者特殊意义的可打印字符)去表示那些不安全的字符。

不能在 URL 中包含任何非 ASCII 字符,如中文字符、希腊文字符,拉丁文字符等。如果客户端浏览器和服务端浏览器支持的字符集不同的情况下,中文可能会造成乱码问题。

URL 拼接参数或路径设置时,拼接的普通字符串中含有保留字符,会引起歧义的情况。URL 参数字符串中使用 key=value 这样的键值对形式来传参,键值对之间以 & 符号分隔,如宝洁公司的简称为P&G,假设需要当做参数去传递,name=P&G&t=1450591802326,因为参数中多了一个&势必会造成接收 URL 的服务器解析错误,因此必须将引起歧义的 & 符号进行转义编码。

部分保留字符及其URL编码

如果需要在URL中用到特殊字符或中文字符,需要将这些特殊字符换成相应的十六进制的值。

URL编码和解码是一个可逆的过程,编码和解码的逻辑是翻转对应的。

成对有两层含义:

• 1、两个方法的逻辑对应。一个固定的编码方式,也对一个固定的逆向解码方式,反之亦然。

• 2、编码和解码的次数也要一一对应。

这四种种字符后,URL编码后的值还是它本身:

1、英文字母(a-z A-Z)

2、数字(0-9)

3、特殊字符( -_.)

4、部分保留字符(英文字符):! * ( ) ; : @ & = + $ , / ?

说明:~ # [] 这四个字符是否被转码成百分号编码,因系统不同会有不同。

URL字符编码使用%百分号加上两位的字符——0123456789ABCDEF——代表一个字节的十六进制形式。因编码后的值含有 % 保留字符。再次编译 % 会编译成 %25。

例如: &

第一次URL编码后:%26

第二次URL编码后:%2526

第三次URL编码后:%252526

正常解码逻辑:

第一次URL解码后:%2526

第二次URL解码后:%26

第三次URL解码后:&

因此,URL编码和解码必须是成对出现的。

初始字符为 & 连续编码三次,连续解码两次,则得到 %26 。

初始字符为 &%26 编码一次:%26%2526 连续解码两次则得到 && 。

我们看一个常见的接口请求示例:

一般会根据 ://、: 、 / 、 ?、 &、= 等拆分出请求的协议、服务器名称(或IP地址)、端口号、路径和文件名、参数名、参数值等。

我们看一个常见的接口请求示例:

绿色字体是保留字符,都有特殊的含义,是不应该是被编码的。红色字体必须要要编译的部分。黄色背景的字符串,不应该被编译。若以上操作不正确,会影响整个URL的解析。

本文网址:https://www.shengjiangju.com/jzzs/376.html
版权声明: 1.本站内容部分为潍坊晟匠聚网络编辑原创文章,部分来源于网络,如需转载,请标注来源网站名字和文章出处链接。 2.本站内容为传递信息使用,仅供参考,也不构成相关建议。 3.部分内容和图片来源于网络,如有侵权,请联系我们处理。

相关资讯

我有建站需求

captcha

*请正确填写需求信息,我们最快会在1小时内与您取得联系!
注:如果想获取实时咨询报价,您可以拔打业务经理手机 13356701695或扫码添加客户经理微信咨询。

Copyright © 2022 潍坊晟匠聚网络   版权所有  All Rights Reserved 备案号:鲁ICP备2022030645号-1 网站地图 企业分站
提供网站建设,网站制作,seo关键词排名优化,专业建站公司价格实惠,业务涵盖潍坊市、潍城区、寒亭区、坊子区、奎文区、高新区、滨海区、峡山区、保税区、临朐县、昌乐县、青州市、诸城市、寿光市、安丘市、高密市、昌邑市等地区
本站内容部分均来自网络,如有侵权嫌疑,请作者本人留言或直接联系管理员,本网站看到留言后将尽快审核删除!