在软件开发中,有很多地方都可能涉及到编码解码而不同类型的编码和解码在不同场景中意义不同,有的时候我们称字符编码解码、或者是为url编码解码、又或者是html编码解码本文将对上面提到的三种编码解码简单说明 编码解码简介 所谓编码,即将一种格式的数据转换成另一种格式 所谓解码,即将编码后的数据还原成原始格式 字符编码解码 为什么要对字符进行编码? 因为在计算机中,不能存储字符,只能存储0和1两个数字。因此,无论什么字符,都必须转换为使用0和1表示的数字后才能存储到计算机。 而把字符通过某种规则,转换成数字,就是字符编码。 字符编码的规则只有一种吗? 不是的,字符编码的规则很多,比如:ASCII、unicode、utf-8、gbk、big5等等等等。 同一个字符,用不同的规则进行编码后,得到的数字可能有差异。 每一种字符编码是不是都能涵盖所有的字符? 不是的,比如ASCII编码,只支持所有的英文字母、英文符号和数字。其他的字符它无法对其进行编码;而gbk编码对简体中文支持良好,但对一些其他国家的文字就不行了 对一个字符,如果使用一种编码方式编码,但使用另一种方式解码,会怎么样呢? 会发生乱码的情况。在解码时,应该使用对应编码的解码方式才能还原最终的结果。 比如一个“我”字,使用unicode进行编码保存,但使用big5的方式解码,则会得到乱码。以后在PHP的文件处理章节中会详细说明 url编码解码 为什么需要对url地址进行编码解码? 在http协议中,对url地址部分,仅支持ASCII编码,也就是说,在url地址中只能存在英文字符、英文字母、数字。如果出现其他的字符,http无法识别。 那如果要在url中放入其他字符怎么办呢?就需要按照某种规则,将这些特殊的字符转换成另一种被ASCII编码支持的字符 url地址的编码和解码有哪些规则? url地址的编码规则,使用的是,由国际标准组织(ISO),在2005年发布的RFC3986“%编码”规范。 绝大部分浏览器都支持这样的规范 RFC3986“%编码”规范具体是什么内容 简单的说,就是把一个字符,使用某种字符编码得到它的十六进制表示格式,然后在每两段十六进制前面使用% 举个例子,比如,对“我”使用url编码,那么具体的流程如下:
再举个例子,比如对url中的保留字&进行编码:
对所有字符都可以使用url编码吗? 不是的,url编码只是为了解决非ASCII字符和保留字问题,如果字符本身就是一个ASCII字符或保留字,则使用url编码不会发生任何变化 比如,如果你对“a”这个字符使用url编码,得到的结果还是“a”,因为“a”本身就是一个ASCII字符,并且它也不是url地址中的保留字,所有不会对其进行编码 在对url地址中某些数据进行编码时,一定会使用utf-8编码吗? 在大部分情况下是这样,这是由浏览器开发商自行设定的规则,不同的浏览器使用哪种字符编码来处理url,里面有很多的细节,目前不必深究。你可以认为就是使用utf-8编码即可。 在需要编码时,我是要对整个url进行编码吗? 不对! 比如,要访问这样的地址:http://localhost/index.php?d=新闻 在这个地址中,只需要编码新闻即可,如果你对整个url地址进行编码,则会得到以下的结果: http%3A%2F%2Flocalhost%2Findex.php%3Fd%3D%E6%96%B0%E9%97%BB 上面深色的部分,是对地址中的保留字编码的结果,而这样的地址不是一个有效的url格式,无法访问。 总之,在处理url编码时,仅需要对用户数据部分进行编码,而解码时也是对用户数据进行解码 html编码解码 什么是html编码解码? 就是对html中一些特殊字符使用另一种形式表示,我们通常把编码后的形式,叫做html实体字符 比如:
为什么需要html编码呢? 如果你想在页面上显示: ,你不可以直接把 直接写到html源码中,因为你这样做,会被浏览器认为是一个标签,而不是一个普通的 字符 所以,你就需要对 进行html编码,把里面的特殊字符转换成html实体后,得到: ,这样就可以在页面上显示出 了。 在PHP中如何进行html编码呢? php提供了两个函数分别用于html的编码和解码: echo ' hello '; //不编码输出echo htmlspecialchars('hello '); //输出html编码后的结果echo htmlspecialchars_decode('hello ');//输出html解码后的结果最终输出: hello hello hello 这样的结果发送给浏览器后,浏览器显示: |
|