• 003_&#x和ASCII的关系及URL中的中文转义


    一、&#x和ASCII的关系

    以下是常用的,在博客园的插入代码块&#+数字后浏览器也会自动把这些字符数字控制符给显示出来;

      -> 空格 (ASCII码_可显示字符: 32十进制)
    ( -> (   (ASCII码_可显示字符: 40十进制)
    ) -> )   (ASCII码_可显示字符: 41十进制)
    - -> -   (ASCII码_可显示字符: 45十进制)
    : -> :   (ASCII码_可显示字符: 58十进制)
    . -> .   (ASCII码_可显示字符: 46十进制)
    
    
    
 -> 换行符 (ASCII码_控制字符: 10十进制)
    

    Reference: http://ascii.911cha.com/

    将这一堆“乱码”保存成网页后,通过浏览器打开又可以正常显示。它的学名叫实体编码 entity code. 

    在 HTML 中,某些字符是预留的,例如小于号「<」、大于号「>」等,浏览器会将它们视作标签。如果想要在HTML中显示这些预留字符,我们就要用到字符实体(character entities)。我们比较熟悉的字符实体有空格「&nbsp;」,小于号「&lt;」,大于号「&gt;」等。这样的格式比较语义化,容易记忆,但其实字符实体有其他的格式:

    &name;
    &#dddd;
    &#xhhhh;

    1. 这三种转义方式都称作 character reference,第一种是 character entity reference,「&」符号后接预先定义好的 entity 名称。

    2. 后两种是 numeric character reference,数字取值为目标字符的 Unicode code point;以「&#」开头的后接十进制数字,「&#x」开头的后接十六进制数字。

    从 HTML4 开始,numeric character reference 以 Unicode 为准,与文档编码无关。「你好」二字分别是 Unicode 字符 U+4F60 和 U+597D,十六进制表示的 code point 数值「4F60」和「597D」,同时也就是十进制的「20320」和「22909」。所以

    在HTML中输入

     &#x4F60;&#x597D;
    &#20320;&#22909;

    都会显示为“你好”。

    Reference: https://www.cnblogs.com/philipding/p/10153094.html 

    二、URL中的中文转义

    (1)编写一个测试的网页地址:

    路径如为: TEST/你好/index.html,浏览器显示为:

    (2)查看该网页的请求头:

    Request URL:
    http://127.0.0.1:5500/TEST/%E4%BD%A0%E5%A5%BD/index.html
    ①浏览器对中文路径URL的转义,如上,虽然在 href 中是直接写的中文,但浏览器悄悄地做了转义。当然你也可以自己先行转义好放在 href 那,这样浏览器就不会再转了。
    ②为什么URL中中文需要转义: 这个原因简单讲就是 URL 中的规范就是这么规定的。
    更准确地说是 URI 规范。URL 是 URI 的一种,常见的 URI 通常也都是 URL,一般情况下会混着用两者。关于 URI 规范,具体可见 http://www.ietf.org/rfc/rfc2396.txt 和 http://www.ietf.org/rfc/rfc3986.txt。(后面的为更新的规范)
    

    ③URL中的转义表示:

    像这样的一串字符"%E4%BD%A0%E5%A5%BD", 其中的每一个部分用【%XX】来表示,其中 XX 表示一个十六进制的数(hexadecimal digits),这样的表示就是所谓的“URL 的转义表示”,也叫“百分号编码”(Percent-Encoding)。如果把其中的百分号 % 去掉,会发现结果是"E4 BD A0 E5 A5 BD",总共 6 个字节,其实就是“主页”两字的 utf-8 编码。

    如果你还记得先前说到的 utf-8 的编码模式(参见大神博客: https://xiaogd.net/%e5%ad%97%e7%ac%a6%e9%9b%86%e4%b8%8e%e7%bc%96%e7%a0%81%ef%bc%88%e5%9b%9b%ef%bc%89-unicode/ ),EX XX XX 通常就是常用汉字的模式。
    

    那么现在比较清楚了,URL 路径中的中文需要转义,具体编码用的是 utf-8。包括本文粘贴的地址也是一样.

    三、第二中所描述即为"百分比编码"或"URL编码"

    百分比编码 是一种拥有8位字符编码的编码机制,这些编码在URL的上下文中具有特定的含义。它有时被称为URL编码。编码由英文字母替换组成:“%” 后跟替换字符的ASCII的十六进制表示

    需要编码的特殊字符有: ':''/''?''#''['']''@''!''$''&'"'"'('')''*''+'','';''=',以及,'%' 本身. 其他的字符虽然可以进行编码但是不需要。

    根据上下文, 空白符 ' ' 将会转换为 '+' (必须在HTTP的POST方法中使定义 application/x-www-form-urlencoded  传输方式), 或者将会转换为 '%20' 的 URL。

  • 相关阅读:
    Unix环境编程常用头文件
    《APUE》读书笔记—第十章信号(上)
    Unix网络编程API
    管道和FIFO
    《APUE》读书笔记—第九章进程关系
    开通博客园
    《APUE》读书笔记—第五章标准I/O库
    《APUE》读书笔记—第十章信号(中)
    《APUE》读书笔记—第三章文件I/O
    《APUE》读书笔记—第七章进程环境
  • 原文地址:https://www.cnblogs.com/arun-python/p/13068952.html
Copyright © 2020-2023  润新知