学习 URL 传参中哪些字符是支持的,哪些是不支持的

server/2025/2/12 5:12:48/

 URL 的结构

URL 由多个部分组成,包括协议、域名、路径、查询参数和片段标识符,其中,查询参数部分就是问号后面的内容,这部分使用键值对,中间用 & 分隔。比如,http://example.com/path?key1=value1&key2=value2。

前言

根据 RFC 3986 标准,URL 中的字符分为保留字符和非保留字符。保留字符在 URL 中有特殊意义,比如: / ? # [ ] @等,这些字符如果在查询参数中出现,可能需要编码。而非保留字符包括字母、数字、- _ . ~,这些可以直接使用。

不过,查询参数的情况可能有点不同。比如,在查询参数中,有些保留字符可能被允许,但需要看具体上下文。例如,? 和 & 用于分隔参数,所以如果在参数值中包含这些字符,必须进行编码。比如,& 应该被编码为 %26,而 = 应该编码为 %3D,否则会被解析为键值对的分隔符。

还有,空格在 URL 中通常被编码为 + 或者 %20。而其他特殊字符,比如!、$、'、(、)、*、,、; 等,可能需要视情况而定。比如,+ 在查询参数中会被视为空格,所以如果有真正的加号,可能需要编码为 %2B。

另外,非 ASCII 字符,比如中文,通常会被转换成 UTF-8 编码,然后每个字节用 % 后面跟两位十六进制数表示。比如,“你好” 会被编码为 % E4% BD% A0% E5% A5% BD。

总结

支持的字符(无需编码)

  1. 字母:A-Za-z
  2. 数字:0-9
  3. 特殊符号:-_.~

需编码的字符

保留字符:在 URL 中有特殊含义,若作为参数内容需编码:

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

常见编码示例:

  1. 空格 → %20 或 +(但+本身需编码为%2B
  2. & → %26(分隔符冲突)
  3. = → %3D(键值对分隔符冲突)
  4. ? → %3F(查询起始符冲突)
  5. # → %23(片段标识符冲突)

其他字符

  1. 非 ASCII 字符(如中文)→ UTF-8 编码后百分比转义,例:你好 → %E4%BD%A0%E5%A5%BD
  2. 控制字符、Unicode 字符等均需编码。

编码规则

  1. 保留字符:若在参数值中出现且不表示其原生语义,必须编码。
  2. 非保留字符:无需编码。
  3. 空格处理:编码为%20+(后者仅在查询部分允许,解码时转为空格)。
  4. 特殊场景
    • +在值中需编码为%2B,避免被解析为空格。
    • %需编码为%25(因其为编码标识符)。

http://www.ppmy.cn/server/166960.html

相关文章

剑指offer第2版:搜索算法(二分/DFS/BFS)

查找本质就是排除的过程,不外乎顺序查找、二分查找、哈希查找、二叉排序树查找、DFS/BFS查找 一、p39-JZ3 找出数组中重复的数字(利用特性) 数组中重复的数字_牛客题霸_牛客网 方法1:全部排序再进行逐个扫描找重复。 时间复杂…

VPN服务器是怎么把数据转发到外网的?

1. 数据到达OpenVPN服务器 客户端发送数据:客户端设备(如电脑、手机)将数据(如网页请求、文件传输等)封装在加密的隧道中,通过互联网发送到OpenVPN服务器。 服务器接收数据:OpenVPN服务器收到客…

2025清华:DeepSeek从入门到精通.pdf(附下载)

本文是一份关于如何深入理解和使用DeepSeek技术的全面指南,由清华大学新闻与传播学院新媒体研究中心元宇宙文化实验室的余梦珑博士后及其团队编撰。DeepSeek是一家中国科技公司,专注于通用人工智能(AGI)的研发,其开源推…

Leetcode 152-乘积最大子数组

给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 题解(动态规划) 题解转载自Leetcode 这题是求数组中子区间的最大乘积&#x…

使用Qt+opencv实现游戏辅助点击工具-以阴阳师为例

注:本文章技术交流使用,不侵犯任何著作权。 一. 阴阳师辅助软件需要实现哪些功能? 1.首先,对于肝绘卷拿角色而言,需要打困难28副本和结界突破循环刷绘卷碎片。这一功能让你每月免费悠闲地拿到最新角色,即使你是较新…

网络安全行业的冬天

冬天已经来了,春天还会远吗?2022年10月28日,各个安全大厂相继发布了财报,纵观2022年前三季度9个月,三六零亏了19亿,奇安信亏了11亿,深信服亏了6亿,天融信亏了4亿,安恒亏了…

Java设计模式——责任链模式与策略模式

责任链模式与策略模式的区别 文章目录 责任链模式与策略模式的区别定义与概念结构与实现应用场景总结 在软件开发中,设计模式是解决各种问题的有力工具。责任链模式和策略模式作为两种常见的设计模式,虽然都能在一定程度上提高代码的可维护性和可扩展性&…

详解SQLAlchemy的函数relationship

在 SQLAlchemy 中,relationship 是一个非常重要的函数,用于定义模型之间的关系。它用于在 ORM 层面上表示数据库表之间的关联关系(如 1 对 1、1 对多和多对多)。relationship 的主要作用是提供一个高级接口,用于在模型…