命令行实现URL编解码

文章目录

  • 命令行实现URL编解码
    • 1. 实现
    • 2. 原理
      • 2.1 url 的编码规则
      • 2.2 printf
    • 附:参考资料

1. 实现

这里的脚本在 GNU bash, version 5.1.4(1)-release (x86_64) 上测试通过。

# 解码
url_decode(){# 加号对应特殊字符空格,单独处理url=${1//+/ }printf "%b\n" "${url//%/\\x}"
}# 编码
url_encode(){# 先无差别编码# 然后对每个字符反解码,如果无需转码,输出原字符,否则输出编码local cfor num in $(echo -n "$1" | xxd -plain | sed -E 's/(..)/\1\n/g' ); doprintf -v c "\x$num"case $c in[a-zA-Z0-9]) ;&[-_.\!\*~]) ;&[\;,/\?:@\&=+$#]) printf "$c" ;;*) printf "%%$num"esacdoneecho ""
}

示例

$ url_encode "https://github.com/chenxizhan1995/lib/tree/master/精通 Spring Boot 42 讲"
https://github.com/chenxizhan1995/lib/tree/master/%e7%b2%be%e9%80%9a%20Spring%20Boot%2042%20%e8%ae%b2
$ url_decode https://github.com/chenxizhan1995/lib/tree/master/%e7%b2%be%e9%80%9a%20Spring%20Boot%2042%20%e8%ae%b2
https://github.com/chenxizhan1995/lib/tree/master/精通 Spring Boot 42 讲

2. 原理

2.1 url 的编码规则

  • URL元字符: ;,/?:@&=+$#,即:
    分号(;),逗号(,),斜杠(/),问号(?),冒号(:),at(@),&,等号(=),加号(+),美元符号($),井号(#
  • 语义字符: 数字字母和-_.!~*'(),即:
    数字字母(a-zA-Z0-9),连词号(-),下划线(_),点(.),感叹号(!),波浪线(~),星号(*),单引号('),圆括号(()

对完整的url进行编码处理,是将元字符和语义字符之外的字符都进行转义。
对URL的组件(如路径或参数)进行编码处理,则是将除了语义字符之外的字符进行转义,包括元字符。

编码时,将需要编码的字符以 %hh 的格式表示,其中 hh 是字符的编码对应的两位十六进制数字。
比如空格的ASCII码值为 0X20,则它编码后就是 %20;解码就是反过来,把 %20 替换为空格。

例如 http://example.com/ba r/tmp 含有特殊字符空格,编码后就是 http://example.com/ba%20r/tmp
另外,空格特别常用,所以直接把空格替换为+,而不是 %20 也是符合规范的,http://example.com/ba+r/tmp
所以解码的时候 后两者都解码为 http://exmaple.com/ba r/tmp

2.2 printf

printf 是 Linux 的命令,它类似于 C 语言的 printf() 函数,用于格式化输出字符串。
它的格式是 printf 'fmt_str' arg1 arg2 ... argN
例如
printf "hello %s, my name is %s\n" Jack Tom 会打印 hello Jack, my name is Tom

该命令支持转义序列

  • \b \t \n \r \f ’ " \
  • 八进制 \n \nn \mnn
  • 十六进制 \xhh \uhhhh \Uhhhhhhhh

printf 'hello,\x20world\n' 会输出 hello,<SP>world<LF>

附:参考资料

linux shell实现中文UrlEncode编解码_beeworkshop的博客-CSDN博客_shell urlencode

如何在命令行上编码和解码percent-encoded字符串? - Ubuntu问答

man printf

命令行实现URL编解码相关推荐

  1. php指令字符编码,如何在命令行上编码和解码percent-encoded字符串?

    问题描述 如何在命令行上编码和解码percent-encoded(URL编码)字符串? 我正在寻找可以做到这一点的解决方案: $ percent-encode "ændrük" % ...

  2. PHP中文URL编解码(urlencode()rawurlencode()

    PHP中文URL编解码(urlencode()rawurlencode() PHP中对于URL进行编码,可以使用 urlencode() 或者 rawurlencode(),二者的区别是前者把空格编码 ...

  3. javascript:URL编解码和父子窗口交互

    简单的URL编解码 URL编码使用javascript的escape实现,在后台也可用System.Web.HttpUtility.UrlEncodeUnicode()实现. 在解码时使用javasc ...

  4. 小工具发布(2008-01-25更新,HTML、URL编解码工具)

    (2008-01-25)HTML.URL编解码工具 [介绍文章][访问该工具]

  5. MSDK手Q邀请透传参数问题:url编解码与base64编解码

    最近做MSDK手Q的邀请功能,遇到一个坑,手Q结构化消息分享功能接口如下: /*** @param scene 标识发送手Q会话或者Qzone* eQQScene.QQScene_QZone: 分享到 ...

  6. win10如何使用命令行通过URL下载文件?

    win10如何使用命令行通过URL下载文件? 1.启动powershell 启动powershell有多种方法,介绍两种: 方法一  快捷键win+R,输入powershell,启动powershel ...

  7. Jva编解码,加密工具类大全(Base64编解码,URL 编解码,sha56_Hmac加密,MD5对字符串进行加密,java自带类实现SHA-256方式加密)

    Base64编解码 /*** Base64编码.*/public static String encodeBase64(byte[] input) {return new String(Base64. ...

  8. Base64、Unicode、URL编解码加解密

    由IFTC(工作室链接:https://shequ.codemao.cn/work_shop/10892)制作的编解码加解密的APP 下载链接:https://creation.codemao.cn/ ...

  9. 常见加密解密和URL编解码

    常见加密解密和URL编解码 Base64 概念: 基于64个可打印字符,用于表示二进制数据,使用的字符包括大小写拉丁字母各26个.数字10个.加号+和斜杠/,共64个字符,等号=用来作为后缀用途 2^ ...

最新文章

  1. 备份----硬盘对拷
  2. Oracle RAC 环境下的连接管理
  3. 戴尔官网全网抄底价! 企业级高性能机Vostro仅¥1,999!更有额外福利等你来领!...
  4. 信息检索报告_iFixR:缺陷报告驱动程序修复
  5. Java 装饰器模式详解
  6. 从零点五开始用Unity做半个2D战棋小游戏(七)
  7. nginx源码初读(8)--让烦恼从数据结构开始(ngx_event)
  8. 传记 | 我的大学三年-不以物喜,不以己悲
  9. if else if与if if语句的区别
  10. 如何使用 Secret?- 每天5分钟玩转 Docker 容器技术(108)
  11. 解决Centos7安装docker源问题
  12. 网站性能测试工具 webbench 的安装和使用-linux
  13. [渝粤教育] 三江学院 财务管理 参考 资料
  14. Sword38——字符串的排列
  15. 如何用计算机做大爆炸模拟,法国完成首个宇宙结构计算机模型 模拟大爆炸至今...
  16. Python极简讲义一本书入门机器学习和数据分析--自学笔记
  17. 为什么C标识符不能以数字开头
  18. Java程序编写----个人所得税计算器编写
  19. 【C语言刷题】青蛙跳台阶
  20. 新手必读:一个牛人给的java九点建议

热门文章

  1. php开发俄罗斯方块,shell中俄罗斯方块_PHP教程
  2. d3d纹理过滤器配置
  3. 互联网支付系统整体架构
  4. 计算机导论 宋斌,宋斌(计算机科学与技术学院)老师 - 南京理工大学 - 院校大全...
  5. 房地产泡沫,经济发展的真正毒瘤
  6. Python批量采集无水印短视频内容
  7. 一键拼接微信好友头像/玩炫朋友圈
  8. 【摸鱼吃瓜工作录】刚到公司,如何让项目经理对你刮目相看
  9. 如何增长U盘的寿命- 小技巧
  10. 用maven的 Mybatis代码生成器