浏览器编码问题

浏览器在解析HTML时,是按照一定的格式和编码来解析的,为了不扰乱HTML结构,有HTML编码(比如:<对应&lt;);为了 不扰乱JS的语法,有JS编码(比如:‘对应\‘),为了正常解析URL,有URL编码(比如:&对应%26)。总结起来也就三类,但是有不同的 编码形式。

1.1.1 HTML编码

HTML编码形式最常见的有三种:别名形式、16进制形式、10进制形式,比如:<>"‘采用这三种方式编码后分别如下:

别名形式:&lt;&gt;&quot;&apos;

16进制形式:<>"'

10进制形式:<>"'

HTML编码的这几种方式可以混合出现,浏览器都可以正常解析。

1.1.2 JS编码

JS编码形式最常见的有四种:斜杠转义形式、16进制形式、Unicode编码形式。<>"‘采用这几种方式编码后分别如下:

斜杠转义形式:\<\>\"\‘

16进制形式:\x3c\x3e\x22\x27

Unicode编码形式:\u003c\u003e\u0022\u0027

这几种方式也可以混合出现。需要指出的是,一般的斜杠转义形式不对字母、数字进行转义,因为可能出现混乱的情况,比如:\x\3\c并不会按想象中那样解析成x3c,而是会报语法错误。

1.1.3 URL编码

URL编码估计大家都非常熟悉,编码都采用%XX的形式,比如同样的<>"‘经URL编码后得到%3C%3E%22%27。

URL编码需要注意的是,只需对URL中的参数值进行编码,比如:http://xxx.com?p1=%3C%3E%22%27,浏览器可以正常识别出url和参数。


如果对整个URL都编码,浏览器是无法识别的,将作为相对路劲识别,见下图。

1.2 编码位置

HTML页面中我们可以按照指定的编码格式去编码,但是,必须符合浏览器的解码规则和顺序,否则浏览器也无法识别。

1.2.1 HTML编码适用位置

HTML编码适用于属性值、标签内的内容,看如下示例:

浏览器解析后如下图:

可以看到:

1、  标签内使用html编码,被解析出来了,并且不影响DOM结构。

2、  属性值使用html编码,被解析出来了,并且在url、js事 件、css中也是如此。

3、  属性名使用html编码,没有被解析出来。

但是,在<script>标签内的js内容以及<style>中的css内容,浏览器是不会使用html编码解码的:


1.2.2 JS编码适用位置

JS编码则只适用于JS代码中,包括<script>内和JS事件中:

1.2.3 URL编码使用位置

URL编码则只适用于为URL的属性值,且只能对URL中的参数进行URL编码。比如:<a>标签的href属性、<iframe>的src属性等。

1.3 解码顺序

既然各个编码有适合自己的位置,并且这种位置必定会重合,所以,浏览器解码必定有一定的顺序。一般的解码顺序为:html解码 > URL解码 > JS解码,看一个简单的例子:


这个示例中,<a>的href属性值是一段js代码,所以,这里会涉及到三种解码:html解码、URL解码、JS解码。按照上面说的顺序,浏览器先做html解码,html解码后如下:


         之后再做url解码,解码后如下:

最后再做js解码,所以最终弹窗的内容应该是‘‘xxx。实际弹窗的内容也是这样的。

时间: 2024-10-17 00:22:20

浏览器编码问题的相关文章

浏览器编码

编码基础 1. ASCII 规定了128个字符,占用一个字节后面7位,最前面1位为0 2. 扩展ASCII 扩展了ASCII的空置区域 3. ISO 8859-1/Latin-1 以ASCII为基础,在空置范围增加96个字符及符号 4. ANSI 与本地环境相关的编码,例:latin1/GBK/BIG5等 5. Unicode 用4个字节,规定了100多万个字符 6. UTF-8 基于Unicode字符集,用1-3个字节,实现了字符的存储规范,兼容ASCII 浏览器编码 1. 浏览器直接输入ur

从php脚本到浏览器,编码方式浅析

今天简单看了一下php,服务器,浏览器如何设定编码 1.php 在php配置文件php.ini中,可以设置字符编码 ; PHP's default character set is set to empty. ; http://php.net/default-charset default_charset = "gb2312" 在PHP 5.6及其之后,"UTF-8"是缺省值(5.6之前是空值),对于以下函数:htmlentities(), html_entity_

针对个别utf8编码站点在iis7上浏览器编码不能自动识别的解决方法

个别utf8编码站点在iis7上客户端浏览器编码不能自动识别的编号,输入仍为gbk2312,而不是utf-8,这样导致我们看到的网站为乱码. 要解决这个问题,有两个方法,一为打开网站以后,右键,选择编码,然后选择utf-8,这样网站就显示正常了.当然这个法对于站长来说行不通,我们的网站是给人看的,没有人看网站会想到或是会去将客户端浏览器去手动改编码. 所以我们只能是选用第二个方法: 在站点根目录下面创建一个web.config文件,放入以下内容: <?xml version="1.0&qu

PHP、MySQL、浏览器编码不统一的情况下如何保证正常解析?

最理想的情况是,把三者编码都统一成gbk或者utf-8,这样解析就一切正常.但如何不统一呢? 比如: --PHP的编码是utf-8 --MySQL的编码是utf-8 --浏览器的编码是gbk 这时,只要考虑PHP和浏览器之间即可,因为PHP和MySQL的编码是一致的,可以不考虑.而如何告诉浏览器,PHP返回给浏览器的东西是用utf-8,请用utf-8解析? 答案: (1)方法之一就是我们在PHP中用的那个header函数.header("Content-type:text/html;charse

谷歌57版本设置浏览器编码

我的谷歌的版本是57的.结果发现浏览器没有设置编码的.今天终于把问题的解决了! 因为谷歌在55版本以后删除了手动设置网站编码的功能.我们需要去安装一个charset插件.在Chrome网上应用商店,收索Charset就会出现. 这个就是我们需要的. 安装完成之后,浏览器的右上角会出现一个标识: 这里就可以设置编码了!

python+selinum启动浏览器编码错误解决方法

测试脚本: from selenium import webdriveraa= webdriver.Firefox()aa.get("http://www.baidu.com") 报错信息: 解决办法: 系统用户名为中文报错,新建一个英文的用户,在该用户下执行即可.

你不知道的 页面编码,浏览器选择编码,get,post各种乱码由来

asp.net页面编码和浏览器的选择编码 每个asp.net的写手都知道,在新版本的visual studio,在没有任何设置的情况下,新建页面时的默认编码位utf-8 我们可以从两个地方可以看出: 第一:打开aspx页面,“文件”->“高级保存选项”,如下图,可以看出编码为:Unicode(UTF-8带签名) 第二:找到aspx存放路径,用系统自带的文本编辑器打开,然后“文件”->"另存为",如下图,可以看出编码为UTF-8 很多时候我们有很多疑问,我们经常在aspx页面

IE浏览器对URL中文字符的编码

在Quality Issue Tracking系统里,有一块RDLC的报表功能,问题主要发生在中文字符的跳转,如下图所示: 我们首先在报表设计器里面打开文本框属性,选择操作的转到URL,可以在里面编写一段的JavaScript的代码,也可以在报表承载页面里添加JavaScript函数(切记此时报表的HyperLinkTarget的属性改为_Self,具体可以查看a标签设置href的js函数与js代码区别). 当我们把鼠标放在上图红色框里时数字,中文字符直接会经过浏览器编码为UTF-8的编码.最后

php页面编码与字符操作

我们可以用header来定义一个php页面为utf编码或GBK编码,也可以在html中用meta标签来指定编码 例如:php页面为utf编码    header("Content-type: text/html; charset=utf-8"); 我们通常使用header或meta,下面说一说两者的区别 一.采用meta页面编码 用meta来设置页面编码 1 <meta http-equiv="content-type" content="text/