X

曜彤.手记

随手写写,关于互联网技术、产品与创业

URL 编码的那些事儿


最近一段时间积累的很多面试经验,也发现了自己薄弱的地方。企业最需要的是基本的业务推动,其次才能谈梦想。基础业务对应着基本能力,基本知识是否扎实是大企业十分看重的一个问题。“T型人才”和“I型人才”,是时候恶补一下基础知识了。今天讲一下 URL 编码。

JavaScript 中有两个方法与 URL 的编码相关,分别是 encodeURIencodeURIComponent。还有一个与字符串的编码相关,对应的函数是 escape

1. 字符串编码用 escape:

escape 函数用来编码所有的字符串,使其可以在所有的平台上以同一种形式进行阅读。escape 函数会编码除字母,数字和 “@*_+-./” 这些字符之外的所有字符。因此不可以将它直接用在 URL 的编码上。escape 函数编码后的字符会以 “%XX” 或 “%XXXX” 的格式表示。

2. encodeURIComponent 比 encodeURI 的编码范围大:

encodeURIComponent 会编码除数字、字母和 “- _ . ! ~ * ‘ ( )” 以外的所有字符,因此不能使用 encodeURIComponent 来编码整个 URL,它更适合用于编码 URL 中的参数部分。而 encodeURI 适合用于编码整个 URL 的场景,比如会将 URL 中的空格编码成 “20%”。

3. PHP 中的 rawurlencode 和 urlencode:

urlencode 返回字符串,此字符串中除了 “-_.” 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 “application/x-www-form-urlencoded” 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码不同。

rawurlencode 返回字符串,此字符串中除了 “-_.” 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在 RFC3986 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。



这是文章底线,下面是评论
  暂无评论,欢迎勾搭 :)