请求识别类URL编码的字符串编码格式(附输入输出样本)
拆解这个类URL编码的自定义变体
咱们先把输入输出拆开来对比,一眼就能看出它和标准application/x-www-form-urlencoded的差异:
输入字符串:ABCDabcd_1234_!_@_#_$_%_^_&_*_(_)_+
编码后结果:ABCDabcd_1234_!_@040_@023_$_@025_^_@026_*_@028_@029_@02b
1. 核心编码规则分析
对比每个特殊字符的处理方式,能总结出这套编码的核心逻辑:
- 基础保留字符:大小写字母、数字、
_、!、$、^、*这些字符完全保留,和标准URL编码的保留规则基本一致。 - 转义逻辑差异:
标准URL编码用%作为转义前缀,后面跟大写的两位十六进制ASCII码;而这套编码用@作为前缀,后面跟小写的三位十六进制ASCII码(不足三位的话前面补0)。
举几个对应例子:@的ASCII是64 → 十六进制40→ 补0成040→ 转义为@040#的ASCII是35 → 十六进制23→ 补0成023→ 转义为@023+的ASCII是43 → 十六进制2B→ 小写后是2b→ 补0成02b→ 转义为@02b
- 额外转义字符:标准URL编码中
@属于保留字符不需要转义,但这套编码里@也被纳入了转义范围。
2. 编码类型定义
这是一套基于application/x-www-form-urlencoded的自定义变体编码,主要修改了转义前缀和十六进制的格式(小写+补0到三位),同时扩展了需要转义的字符范围(增加了@)。
3. 复现编码的步骤
要手动或代码复现这个编码,只需要按以下流程处理每个字符:
- 遍历输入的每个字符:
- 如果字符属于
A-Z、a-z、0-9、_、!、$、^、*,直接保留。 - 其他字符:
- 获取该字符的ASCII十进制值。
- 将十进制值转换为小写十六进制字符串,前面补0直到长度为3位。
- 用
@拼接这个十六进制字符串,替换原字符。
- 如果字符属于
按这个步骤处理你的输入字符串,就能完全得到你给出的输出结果。
内容的提问来源于stack exchange,提问作者mdj
相关产品推荐
相关产品推荐

