好程序员 web 前端教程分享 js 文件引用编码方式 , js 外部文件编码由这些因素决定: 1. 如果 Apache 有 DefaultCharset ,则 js 文件解析用服务器指定的编码; 2. 如果 PHP header 声明 charset 为编码 utf-8 ,则文件编码用 utf-8 来解析。 3. 如果以上两个都为空,页面编码由 meta 标签决定。 4. 如果以上声明都没有,则会使用 utf-8 来解析。 5. 如果页面编码为 gbk ,而 js 文件编码为 utf-8 ,则可以在 js 属性中定义 charset='utf-8' 。
创新互联建站-专业网站定制、快速模板网站建设、高性价比米林网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式米林网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖米林地区。费用合理售后完善,10余年实体公司更值得信赖。
昨天帮同事解决的一个问题 ,GBK 的页面 ( 不要问我为什么 GBK, 因为 GBK, 所以 GBK), 引用了 Google map 的 API, 但是由于 GoogleMap API 返回的 js 脚本是 utf-8 的 , 所以导致在 IE 下 , 浏览器无法正确解析 .
也就是 , 由于服务器中生成的 HTML 是基于 gbk 编码的 , 并且由于 Apache 的 DefaultCharset( 后叙 ), 所以导致 IE 会以 gbk 编码去解析从外部引入的 GoogleMap js, 那肯定是不能正确解释的 .
浏览器判断一个页面的编码有俩个途径 , 一种是通过 HTTP 响应头 ,
HTTP/1.x 200 OK
Date: Sat, 18 Oct 2008 21:53:51 GMT
Server: Apache/2.0.52 (Red Hat)
X-Powered-By: PHP/5.3.0alpha2
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=GB2312
注意最后一行 , 这个是由 HTTP 头部指明的页面编码格式 .
另外一种就是我们常见的 , 也会另很多初学者困惑的 meta:
问题就在于 , 没有一个统一的标准 , 来指明这俩中方式的优先级 , 不同的浏览器有着不同的优先级策略 . 这也就是为什么 , 我们在 FF 下正常浏览的页面 , 在 IE 下会乱码的原因 .
我之前的文章 Apache 的 Charset 设置中已经介绍过了在 Apache 下设置 DefaultCharset 以后产生的影响 ,
这个问题已经遇到过俩次了,就是页面中明确指明了编码是 UTF8, 但是显示是乱码。
虽然知道解决方法,也知道是 Apache 的原因,但是一直没有去找其所以然,今天趁机,就研究了一下。
1. 页面没有指定 charset , Apache 配置 defaultcharst gbk , 页面文件编码是 utf-8
结果 : 乱码,使用 wireshark 抓包,发现服务器返回的 header 中指明了 :
Content-Type:text/html;charset=GBK
结论:当页面没有指明 charset 的时候, Apache 的 defaultcharset 起作用
2. 页面指定 charset 为 utf-8, Apache 配置 defaultcharset gbk. 页面文件是 utf-8
测试 Apache DefaultCharset