美文网首页网络编程
网络编程 - URL编码

网络编程 - URL编码

作者: HRocky | 来源:发表于2019-05-06 11:39 被阅读0次

URL字符串中的字符

参考:RFC2396 RFC1738

URL中使用的字符必须来自ASCII的一个固定的子集,确切地讲,包括:

  • 大写字母A-Z
  • 小写字母a-z
  • 数字0-9
  • 保留字符:具有特殊含义的字符
    ; / ? : @ & = + $ ,
  • 特殊字符
    - _ . ! ~ * ' ( )

既然规定了URL中允许的字符范围,那么范围外的字符出现在URL字符串中的时候就要做编码处理。下面就详细说一下哪些字符需要编码以及原因:

  • ASCII控制字符
    控制字符是无法打印的,也就是说你在URL中根本就不能把它输入显示出来,需通过编码处理。
  • 非ASCII字符
    包含非ASCII字符的URL是无效的,所以需要做编码处理。
  • 保留字符
    上面不是说了保留字符可以出现在URL中吗?这里为什么又要提出来?保留字符是在URL中具有特殊意义的字符,但是如果这些字符在URL中的出现并不是完成它的特殊意义,那么就必须做编码处理,比如说"="有特殊意思,它隔断参数的名和值,但是如果"="本身就是名或者值的一部分的时候,它在URL中的作用就不是一个保留字符了,这时候就需要做编码处理,不然的话把它看作保留字符然后进行URL解析的时候就会出现问题。
  • 不安全字符
    下面是RFC文档中对不安全字符的描述:字符不安全的原因有很多。空格字符就是不安全的,因为URL在被转录或者被排版或者被字处理程序处理后其中重要的空格可能被忽略,而可忽略的空格却有可能被解释了。"<"和">"字符也是不安全的,因为它们被用来作为URL在文本中的分隔符;而在有些系统中用引号"来界定URL。"#"字符也是不安全的,因为它在万维网和其他一些系统中被用来从"片段/锚点"标识符中界定URL,所以它通常都要被编码。字符"%"被用来对其他字符进行编码,它也是不安全的。其他一些字符,如: "{", "}", "|", "", "^", "~", "[", "]", 和 "`",由于网关和其他传输代理有时会对这些字符进行修改,所以它们也是不安全的。

百分号编码(Percent-encoding)

上面说到了要对URL中非有效字符进行编码,那么如何进行编码呢?URL中使用百分号编码的方式进行编码,这个编码的方式为:

“%”后面跟着替换字符的ASCII值的十六进制表示形式。

空格是一种特殊情况,因为它太普遍了。除了编码为%20,空格可以编码为加号(+)。加号本身编码为%2B。

下面列出了一些常见字符的编码值:

字符 编码值
: %3A
/ %2F
? %3F
# %23
[ %5B
] %5D
@ %40
! %21
$ %24
& %26
' %27
( %28
) %29
* %2A
+ %2B
, %2C
; %3B
= %3D
% %25
空格 %20 or +

根据上下文的不同,空字符被翻译成'+'(类似于application/x-www-form-urlencoded消息中使用的百分比编码版本),或者像在Urls中编码成'%20'。

URL编码问题

下面的文章对URL编码问题描述得比较详细,跳转阅读:

http://www.ruanyifeng.com/blog/2010/02/url_encoding.html

相关文章

  • 网络编程 - URL编码

    URL字符串中的字符 参考:RFC2396 RFC1738 URL中使用的字符必须来自ASCII的一个固定的子集,...

  • 学习记录2

    url编码 winsock编程 url编码 就是以百分号开头的16进制两位ascii码中文通常为对应的utf编码一...

  • iOS网络编程读书笔记

    iOS网络编程读书笔记 Facade Tester客户端门面模式的实例(被动版本化) 被动版本化,所以硬编码URL...

  • Android应用开发:网络编程2

    网络编程 Java基础:网络编程 Uri、URL、UriMatcher、ContentUris详解 Android...

  • Http协议

    网络编程 Java基础:网络编程 Uri、URL、UriMatcher、ContentUris详解 Android...

  • URL网络编程

    URL类常用方法 URL编程:从网络上下载一张图片到本地

  • URL编码浅谈

    本文是对在正常网络请求的URL中哪些字符需要编码,为什么需要编码进行了说明 URI介绍 为什么需要URL编码 通常...

  • 218集 生产者消费者环境

    219线程 任务调度 220 线程总结 221课 网络编程_概念_网络_端口_URL_TCP_UDP 网络编程是网...

  • 网络编程基础1

    网络编程基础1 URL url(统一资源定位符 Uniform Resourse Locator)通过一个URl,...

  • ROR(47)url编码与Base64编码的区别

    URL 编码 Base64 编码的区别 1 url编码 1.1 什么是 url 编码 型如/url/?%E5%B9...

网友评论

    本文标题:网络编程 - URL编码

    本文链接:https://www.haomeiwen.com/subject/fzpkoqtx.html