美文网首页
URL 的编码

URL 的编码

作者: yibuyisheng | 来源:发表于2018-03-22 15:51 被阅读27次

什么是 URL

URL 就是用来定位资源的字符串。

怎么样的字符串是合法的 URL

满足如下条件的字符串都是合法的 URL:

  • 字符串是一个合法的 URI ( Uniform Resource Identifier ) 字符串。其中,构成 URI 字符串的字符集合必须是 ASCII 码的子集。
  • 字符串是一个合法的没有查询串的 IRI ( Internationalized Resource Identifier ) 字符串。 IRI 字符串是基于 Unicode 字符集的。
  • 字符串是一个合法的 IRI 字符串,并且不能包含未被编码( escaped )的非 ASCII 查询字符串。
  • 字符串所在文档的编码是 UTF-8 或者 UTF-16。

注: Unicode 是字符集,而 UTF-8 是一种以8位为一个编码单位的可变长编码方式,定义了具体字符和 Unicode 码之间的相互转换规则。

URL 中不能包含非 ASCII 字符,所以在实际场景中,会将 URL 中的非 ASCII 字符转换为 ASCII 字符,采用的规则是:将非 ASCII 字符按照一定的编码方式( 典型的就是 UTF-8 )转换为 Unicode 中的码位,然后用码位对应数值的16进制形式,加上%号前缀,形成编码后的字符串,用这个字符串替换掉 URL 中对应的非 ASCII 字符串,就形成了合法的 URL 。

URL 的“合法化”

在浏览器环境中,主要存在如下需要“合法化” URL 的场景:

  • 直接在地址栏输入 URL,此种场景又分为两部分来解析:
    • URL path 部分的解析。
    • URL 查询字符串部分的解析。
  • 使用 encodeURI 对字符串中的非法字符进行编码( UTF-8 编码方式 )。
  • 位于 HTML 文档内的字符串,比如 form 标签中的 action 属性、 a 标签中的 href 属性等等。

处理规则为:

  • 无论何处的 URL 字符串, path 部分的编码都是按照 UTF-8 方式来执行的,所以此部分的非 ASCII 字符编码出来的样子是 UTF-8 转换后的 Unicode 码位值。
  • 对于查询字符串部分,有两种情况:
    • 地址栏中的查询字符串和调用 encodeURI 方法一样,都是直接采用 UTF-8 编码方式。
    • HTML 文档中 URL 的查询字符串部分,采用的编码方式与文档的编码方式一致,比如文档中有一句代码:<a href="http://www.baidu.com/?q=中文">查询</a>,如果文档编码是 UTF-8 ,那么转换出来的字符串为:http://www.baidu.com/?q=%E4%B8%AD%E6%96%87;如果文档编码是 GBK ,那么转换出来的字符串为:http://www.baidu.com/?q=%D6%D0%CE%C4

注: 文档编码的确定方式,优先级由高到低的顺序为:

  • 浏览器加载到的 HTML 文件采用了带 BOM 的 UTF-8 编码,那么浏览器可以根据这个编码来确定整个文档的编码。
  • 在 HTML 文件对应的 HTTP 请求的响应头部里面指定了编码,比如content-type: text/html; charset=UTF-8,那么文档的编码就是此处指明的编码。
  • 在 HTML 代码里面使用 meta charset 指定编码,比如<meta charset="UTF-8">。此时要注意,一定要确保这个编码声明位于整个 HTML 文件的前1024 byte 之内,不然可能会造成浏览器无法正确读到编码值。

相关文章

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

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

  • 服务器与浏览器之间的编码问题

    服务器与浏览器之间的编码问题 url编码 URL编码 1. 什么是url 2. 什么是url编码 2.1 在因特网...

  • Web 相关编码和转义

    常用编码 URL 编码 HTML 编码 JS 编码 URL编码 一般来说,URL只能使用英文字母(a-zA-Z)、...

  • URL编码

    介绍 URL 编码 URL 编码也被称为百分号编码。 URL 编码的规则:简单来说,如果需要对一个字符进行 URL...

  • URL 如何编码解码?为什么要编码

    title: URL 如何编码解码?为什么要编码tags: URLnotebook: 零散知识 URL 如何编码解...

  • 编码、解码

    编码:encodeURLComponent(url) 解码:decodeURLComponent(url)

  • iOS URL安全的Base64编码、解码

    参考iOS开发探索-Base64编码iOS URL编码&base64编码URL安全的Base64编码,解码 为什么...

  • python3模块

    1、Url编码解析:from urllib import parse url编码:parse.quote(参...

  • url编码

    为什么要进行URL编码 编码是对url中的中文和特殊符号进行编码。对url编码其实就是对一些特殊字符进行使用utf...

  • URL编码

    JS关于URL编码 url的三个js编码函数escape(),encodeURI(),encodeURICompo...

网友评论

      本文标题:URL 的编码

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