• 基础概念——URL编码


    URL只能使用英文字母,阿拉伯数字和一些特殊字符;或者说URL 只能使用 ASCII 字符集来通过因特网进行发送。

    如果URL中有汉字,就必须编码后使用。

    但是麻烦的是 标准的国际组织并没有规定具体的编码方法,而是交给应用程序(浏览器)自己决定。这导致"URL编码"成为了一个混乱的领域。

    对于非ASCII字符,RFC文档建议使用utf-8对其进行编码得到相应的字节,然后对每个字节执行百分号编码。

    如"中文"使用UTF-8字符集得到的字节为0xE4 0xB8 0xAD 0xE6 0x96 0x87,经过Url编码之后得到"%E4%B8%AD%E6%96%87"。

    由于URL中好多字符是保留字,他们在URL中具有特殊的含义。如“&”表示参数分隔符,如果想要在URL中使用这些保留字,那就得对他们进行编码。

    对URL中属于ASCII字符集非保留字不做编码;

    对URL中的保留字需要取其ASCII内码,然后加上“%”前缀将该字符进行替换(编码);

    对URL中的非ASCII字符需要取其Unicode内码,然后加上“%”前缀将该字符进行替换(编码)。

    由于这种编码是采用“%”加上字符内码的方式,所以,有些地方也称其为“百分号编码”。

    接下来总结一下URL编码混乱的场景有哪些:

    情况1:网址路径中包含汉字: 使用的是utf-8编码;

    情况2:查询字符串包含汉字; 用的是操作系统的默认编码。

    情况3:Get方法生成的URL包含汉字;由HTML源码中字符集的设定决定;GET和POST方法的编码,用的是网页的编码。

    情况4:Ajax调用的URL包含汉字;在Ajax调用中,IE总是采用GB2312编码(操作系统的默认编码),而Firefox总是采用utf-8编码。

    使用Javascript先对URL编码,然后再向服务器提交,不要给浏览器插手的机会。

    因为Javascript的输出总是一致的,所以就保证了服务器得到的数据是格式统一的。

    无论网页的原始编码是什么,一旦被Javascript编码,就都变为unicode字符。

    也就是说,Javascipt函数的输入和输出,默认都是Unicode字符。encodeURI()是Javascript中真正用来对URL编码的函数。它对应的解码函数是decodeURI()。

    需要注意的是,它不对单引号'编码。



    讨论一下什么是字符集,字符编码,编码和解码:

    字符集:
    将一些自然语言中的字符组成一个集合;

    字符编码:
    字符编码,就是建立一套自然语言中的“字符”跟计算机能够存储 处理的二进制数的映射的规则。
    即在一个字符集内,用一个特定的二进制数表示一个唯一“字符”,类似于学号跟学生的映射关系。

    为什么需要编码
    当数据不利于处理、存储的时候,就需要对它们进行编码。
    对字符进行编码是因为自然语言中的字符不利于计算机处理和存储。

    编码和解码
    根据实际需求的差异,编码、解码算法有可能会很复杂,也有可能非常的简单,
    但是从根本上来讲,编码、解码只是在做翻译工作,将一种形式的数据翻译为另一种形式的数据
    如,最简单的编码、解码就是相当于从一个Map中根据key查找value,然后使用value代替实际数据中的key的值。



    参考链接:

    URL编码与解码:https://www.cnblogs.com/Wahitler/p/4761373.html

    URL编解码:https://www.jianshu.com/p/e4839089b6ef

    关于URL编码:http://www.ruanyifeng.com/blog/2010/02/url_encoding.html

  • 相关阅读:
    深入理解HTTP协议及原理分析
    如何提高php应用的性能?
    PHP的网站主要攻击方式有哪些?
    五种常见的 PHP 设计模式
    排序算法之插入排序类
    排序算法之交换排序类
    Redis之Zset
    Redis之Set
    Redis之List
    Redis之Hash
  • 原文地址:https://www.cnblogs.com/grooovvve/p/14158826.html
Copyright © 2020-2023  润新知