What is URL Encoding and How does it work?
Introduction
A URL (Uniform Resource Locator) is the address of a resource in the world wide web. URLs have a well-defined structure which was formulated in RFC 1738 by Tim Berners-Lee, the inventor of the world wide web.
Every URL confirms to a generic syntax which looks like this -
scheme:[//[user:password@]host[:port]]path[?query][#fragment]
Some parts of the URL syntax like [user:password@] are deprecated and seldom used due to security reasons. Following is an example of a URL that you see more often on the internet -
https://www.google.com/search?q=hello+world#brs
There have been many improvements done to the initial RFC defining the syntax of Uniform Resource Locators (URLs). The current RFC that defines the Generic URI syntax is RFC 3986. This post contains information from the latest RFC document.
URL Encoding (Percent Encoding)
A URL is composed from a limited set of characters belonging to the US-ASCII character set. These characters include digits (0-9), letters(A-Z, a-z), and a few special characters ("-", ".", "_", "~").
ASCII control characters (e.g. backspace, vertical tab, horizontal tab, line feed etc), unsafe characters like space, \, <, >, {, } etc, and any character outside the ASCII charset is not allowed to be placed directly within URLs.
Moreover, there are some characters that have special meaning within URLs. These characters are called reserved characters. Some examples of reserved characters are ?, /, #, : etc. Any data transmitted as part of the URL, whether in query string or path segment, must not contain these characters.
So what do we do when we need to transmit any data in the URL that contain these disallowed characters? Well, we encode them!
URL Encoding converts reserved, unsafe, and non-ASCII characters in URLs to a format that is universally accepted and understood by all web browsers and servers. It first converts the character to one or more bytes. Then each byte is represented by two hexadecimal digits preceded by a percent sign (
%) - (e.g.%xy). The percent sign is used as an escape character.
URL encoding is also called percent encoding since it uses percent sign (%) as an escape character.
URL Encoding Example
Space: One of the most frequent URL Encoded character you’re likely to encounter is space. The ASCII value of space character in decimal is 32, which when converted to hex comes out to be 20. Now we just precede the hexadecimal representation with a percent sign (%), which gives us the URL encoded value - %20.
ASCII Character Encoding Reference
The following table is a reference of ASCII characters to their corresponding URL Encoded form.
Note that, Encoding alphanumeric ASCII characters are not required. For example, you don’t need to encode the character
'0'to%30as shown in the following table. It can be transmitted as is. But the encoding is still valid as per the RFC. All the characters that are safe to be transmitted inside URLs are colored green in the table.
The following table uses rules defined in RFC 3986 for URL encoding.
| Decimal | Character | URL Encoding (UTF-8) |
|---|---|---|
| 0 | NUL(null character) | %00 |
| 1 | SOH(start of header) | %01 |
| 2 | STX(start of text) | %02 |
| 3 | ETX(end of text) | %03 |
| 4 | EOT(end of transmission) | %04 |
| 5 | ENQ(enquiry) | %05 |
| 6 | ACK(acknowledge) | %06 |
| 7 | BEL(bell (ring)) | %07 |
| 8 | BS(backspace) | %08 |
| 9 | HT(horizontal tab) | %09 |
| 10 | LF(line feed) | %0A |
| 11 | VT(vertical tab) | %0B |
| 12 | FF(form feed) | %0C |
| 13 | CR(carriage return) | %0D |
| 14 | SO(shift out) | %0E |
| 15 | SI(shift in) | %0F |
| 16 | DLE(data link escape) | %10 |
| 17 | DC1(device control 1) | %11 |
| 18 | DC2(device control 2) | %12 |
| 19 | DC3(device control 3) | %13 |
| 20 | DC4(device control 4) | %14 |
| 21 | NAK(negative acknowledge) | %15 |
| 22 | SYN(synchronize) | %16 |
| 23 | ETB(end transmission block) | %17 |
| 24 | CAN(cancel) | %18 |
| 25 | EM(end of medium) | %19 |
| 26 | SUB(substitute) | %1A |
| 27 | ESC(escape) | %1B |
| 28 | FS(file separator) | %1C |
| 29 | GS(group separator) | %1D |
| 30 | RS(record separator) | %1E |
| 31 | US(unit separator) | %1F |
| 32 | space | %20 |
| 33 | ! | %21 |
| 34 | " | %22 |
| 35 | # | %23 |
| 36 | $ | %24 |
| 37 | % | %25 |
| 38 | & | %26 |
| 39 | ' | %27 |
| 40 | ( | %28 |
| 41 | ) | %29 |
| 42 | * | %2A |
| 43 | + | %2B |
| 44 | , | %2C |
| 45 | - | %2D |
| 46 | . | %2E |
| 47 | / | %2F |
| 48 | 0 | %30 |
| 49 | 1 | %31 |
| 50 | 2 | %32 |
| 51 | 3 | %33 |
| 52 | 4 | %34 |
| 53 | 5 | %35 |
| 54 | 6 | %36 |
| 55 | 7 | %37 |
| 56 | 8 | %38 |
| 57 | 9 | %39 |
| 58 | : | %3A |
| 59 | ; | %3B |
| 60 | < | %3C |
| 61 | = | %3D |
| 62 | > | %3E |
| 63 | ? | %3F |
| 64 | @ | %40 |
| 65 | A | %41 |
| 66 | B | %42 |
| 67 | C | %43 |
| 68 | D | %44 |
| 69 | E | %45 |
| 70 | F | %46 |
| 71 | G | %47 |
| 72 | H | %48 |
| 73 | I | %49 |
| 74 | J | %4A |
| 75 | K | %4B |
| 76 | L | %4C |
| 77 | M | %4D |
| 78 | N | %4E |
| 79 | O | %4F |
| 80 | P | %50 |
| 81 | Q | %51 |
| 82 | R | %52 |
| 83 | S | %53 |
| 84 | T | %54 |
| 85 | U | %55 |
| 86 | V | %56 |
| 87 | W | %57 |
| 88 | X | %58 |
| 89 | Y | %59 |
| 90 | Z | %5A |
| 91 | [ | %5B |
| 92 | \ | %5C |
| 93 | ] | %5D |
| 94 | ^ | %5E |
| 95 | _ | %5F |
| 96 | ` | %60 |
| 97 | a | %61 |
| 98 | b | %62 |
| 99 | c | %63 |
| 100 | d | %64 |
| 101 | e | %65 |
| 102 | f | %66 |
| 103 | g | %67 |
| 104 | h | %68 |
| 105 | i | %69 |
| 106 | j | %6A |
| 107 | k | %6B |
| 108 | l | %6C |
| 109 | m | %6D |
| 110 | n | %6E |
| 111 | o | %6F |
| 112 | p | %70 |
| 113 | q | %71 |
| 114 | r | %72 |
| 115 | s | %73 |
| 116 | t | %74 |
| 117 | u | %75 |
| 118 | v | %76 |
| 119 | w | %77 |
| 120 | x | %78 |
| 121 | y | %79 |
| 122 | z | %7A |
| 123 | { | %7B |
| 124 | | | %7C |
| 125 | } | %7D |
| 126 | ~ | %7E |
| 127 | DEL(delete (rubout)) | %7F |
Footnotes
What is URL Encoding and How does it work?的更多相关文章
- 关于Unicode和URL encoding入门的一切以及注意事项
本文同时也发表在我另一篇独立博客 <关于Unicode和URL encoding入门的一切以及注意事项>(管理员请注意!这两个都是我自己的原创博客!不要踢出首页!不是转载!已经误会三次了! ...
- rest-assured的根路径(root path)和URL编码(URL Encoding)
一.根路径(Root path) 为了避免在body方法中使用重复的路径来断言,我们可以指定一个根路径(root path),比如: 我们以前的写法是: when(). get("/some ...
- URL encoding(URL编码)
URL encoding(URL编码),也称作百分号编码(Percent-encoding),是指特定上下文的统一资源定位符(URL)编码机制UrlEncode:将字符串以URL编码返回值:字符串函数 ...
- url 编码(percentcode 百分号编码)(转载)
原文地址:http://www.cnblogs.com/leaven/archive/2012/07/12/2588746.html http://www.imkevinyang.com/2009 ...
- URL中的保留和不安全字符
书写URL时要使用US-ASCII字符集可以显示的字符. http://www.google.com 如果需要在URL中使用不属于此字符集的字符,就要使用特殊的符号对该字符进行编码. 如:最常使用的空 ...
- URL编码知识摘抄备忘
网页工具 http://www.107000.com/T-UrlEncode/ 参考: 维基百科http://zh.wikipedia.org/zh/%E7%99%BE%E5%88%86%E5%8F% ...
- Swift3.0语言教程字符串与URL的数据转换与自由转换
Swift3.0语言教程字符串与URL的数据转换与自由转换 Swift3.0语言教程字符串与URL的数据转换 Swift3.0语言教程字符串与URL的数据转换与自由转换,字符串中的字符永久保存除了可以 ...
- Web开发须知:URL编码与解码
通常如果一样东西需要编码,说明这样东西并不适合传输.原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义. 例如,Url参数字符串中使用key ...
- 详解JavaScript中的Url编码/解码,表单提交中网址编码
本文主要针对URI编解码的相关问题做了介绍,对Url编码中哪些字符需要编码.为什么需要编码做了详细的说明,并对比分析了Javascript 中和 编解码相关的几对函数escape / unescape ...
随机推荐
- yarn 的常用命令
初始化新项目yarn init添加依赖包yarn add [package]yarn add [package]@[version]yarn add [package]@[tag]将依赖项添加到不同依 ...
- eNSP基于接口地址池的dhcp服务
拓扑图如下 基于接口的dhcp是最简单的一种 我们对路由器的两个端口分别设置ip地址为192.168.1.254 192.168.2.254 然后分别进入接口进行下一步配置 dhcp select i ...
- PHP实现单点登录最简单的方法
PHP实现单点登录最简单的方法 用户在A登录 存入登录状态 登录B站(A的识别要传入B) 获取A的登录状态
- spark源码阅读 RDDs
RDDs弹性分布式数据集 spark就是实现了RDDs编程模型的集群计算平台.有很多RDDs的介绍,这里就不仔细说了,这儿主要看源码. abstract class RDD[T: ClassTag]( ...
- python线程队列Queue-FIFO(35)
之前的文章中讲解很多关于线程间通信的知识,比如:线程互斥锁lock,线程事件event,线程条件变量condition 等等,这些都是在开发中经常使用的内容,而今天继续给大家讲解一个更重要的知识点 — ...
- Deepin中安装docker
1.sudo apt install docker-ce: 2.安装好后可以用docker version查看一下是否成功,还可以通过网络详情里是否多了一个docker0来判断: 3.sudo use ...
- 034 Android NavigationView和DrawerLayout实现抽屉式导航设计(侧边栏效果)
1.创建带侧滑效果的activity 右击,new---->activity---->选择NavgationDrawer Activity 2.xml文件布局 (1)activity_ma ...
- (6)Spring Boot web开发 --- 错误处理页面
文章目录 处理时间(`Date`)类型 thymeleaf 页面拼接字符串 映射路径占位符 使用 put.delete 方法 错误处理机制 处理时间(Date)类型 Spring Boot 进行参数绑 ...
- yzoj 2377 颂芬梭哈 题解
题意 Alice 和 Mukyu 最近偶然得到了一本写有一种叫做梭哈的扑克游戏的规则的说明书(名为<C████████nd>,中间部分被涂掉了),据其所述,梭哈是一种使用黑桃.红心.梅花. ...
- Python进阶:metaclass谈
metaclass 的超越变形特性有什么用? 来看yaml的实例: import yaml class Monster(yaml.YAMLObject): yaml_tag = u'!Monster' ...