欢迎光临
我们一直在努力

Bash 专业人员笔记 -- 第64章:URL 解码

URL 编码(百分号编码)将特殊字符转换为 %XX 形式(其中 XX 是十六进制 ASCII 码)。URL 解码则是将 %XX 恢复为原始字符。Bash 脚本中可以通过多种方式实现 URL 解码。

1. 使用 printf 和 sed 的基本解码

最简洁的方法:利用 printf 的 \\x 格式将十六进制转为字符。

url_decode() {


local encoded=\”$1\”
# 将 %XX 转换为 \\xXX,然后交给 printf 解析
printf \’%b\’ \”${encoded//%/\\\\x}\”
}

示例:

decoded=$(url_decode \”Hello%20World%21\”)
echo \”$decoded\” # 输出: Hello World!

注意:%b 会展开反斜杠转义序列,\\xXX 正是 printf 支持的十六进制转义。

2. 更完整的解码函数(处理 + 号)

在 application/x-www-form-urlencoded 数据中,空格通常编码为 + 号,而非 %20。需要先将 + 替换为空格。

url_decode() {


local encoded=\”$1\”
# 将 + 替换为空格
encoded=\”${encoded//+/ }\”
# 将 %XX 转为对应的字符
printf \’%b\’ \”${encoded//%/\\\\x}\”
}

测试:

decoded=$(url_decode \”name=John+Doe&city=NYC\”)
echo \”$decoded\” # 输出: name=John Doe&city=NYC

3. 使用 sed 逐字符转换(更可靠但较慢)

对于特殊字符(如 %0A 换行符)的处理,printf \’%b\’ 有时受 locale 影响。可以使用 sed 配合 xxd 或 perl:

url_decode() {


echo

赞(0)
未经允许不得转载:171主机测评 » Bash 专业人员笔记 -- 第64章:URL 解码
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址