好程序員web前端教程分享js文件引用編碼方式-創(chuàng)新互聯(lián)

好程序員 web 前端教程分享 js 文件引用編碼方式 , js 外部文件編碼由這些因素決定: 1. 如果 Apache 有 DefaultCharset ,則 js 文件解析用服務(wù)器指定的編碼; 2. 如果 PHP header 聲明 charset 為編碼 utf-8 ,則文件編碼用 utf-8 來(lái)解析。 3. 如果以上兩個(gè)都為空,頁(yè)面編碼由 meta 標(biāo)簽決定。 4. 如果以上聲明都沒(méi)有,則會(huì)使用 utf-8 來(lái)解析。 5. 如果頁(yè)面編碼為 gbk ,而 js 文件編碼為 utf-8 ,則可以在 js 屬性中定義 charset='utf-8' 。

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比米林網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式米林網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋米林地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。

 

昨天幫同事解決的一個(gè)問(wèn)題 ,GBK 的頁(yè)面 ( 不要問(wèn)我為什么 GBK, 因?yàn)? GBK, 所以 GBK), 引用了 Google map 的 API, 但是由于 GoogleMap API 返回的 js 腳本是 utf-8 的 , 所以導(dǎo)致在 IE 下 , 瀏覽器無(wú)法正確解析 .

 

也就是 , 由于服務(wù)器中生成的 HTML 是基于 gbk 編碼的 , 并且由于 Apache 的 DefaultCharset( 后敘 ), 所以導(dǎo)致 IE 會(huì)以 gbk 編碼去解析從外部引入的 GoogleMap js, 那肯定是不能正確解釋的 .

 

瀏覽器判斷一個(gè)頁(yè)面的編碼有倆個(gè)途徑 , 一種是通過(guò) HTTP 響應(yīng)頭 ,

 

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

注意最后一行 , 這個(gè)是由 HTTP 頭部指明的頁(yè)面編碼格式 .

 

另外一種就是我們常見(jiàn)的 , 也會(huì)另很多初學(xué)者困惑的 meta:

 

問(wèn)題就在于 , 沒(méi)有一個(gè)統(tǒng)一的標(biāo)準(zhǔn) , 來(lái)指明這倆中方式的優(yōu)先級(jí) , 不同的瀏覽器有著不同的優(yōu)先級(jí)策略 . 這也就是為什么 , 我們?cè)? FF 下正常瀏覽的頁(yè)面 , 在 IE 下會(huì)亂碼的原因 .

 

我之前的文章 Apache 的 Charset 設(shè)置中已經(jīng)介紹過(guò)了在 Apache 下設(shè)置 DefaultCharset 以后產(chǎn)生的影響 ,

 

這個(gè)問(wèn)題已經(jīng)遇到過(guò)倆次了,就是頁(yè)面中明確指明了編碼是 UTF8, 但是顯示是亂碼。

 

雖然知道解決方法,也知道是 Apache 的原因,但是一直沒(méi)有去找其所以然,今天趁機(jī),就研究了一下。

 

1. 頁(yè)面沒(méi)有指定 charset , Apache 配置 defaultcharst gbk , 頁(yè)面文件編碼是 utf-8

 

結(jié)果 : 亂碼,使用 wireshark 抓包,發(fā)現(xiàn)服務(wù)器返回的 header 中指明了 :

 

Content-Type:text/html;charset=GBK

結(jié)論:當(dāng)頁(yè)面沒(méi)有指明 charset 的時(shí)候, Apache 的 defaultcharset 起作用

 

2. 頁(yè)面指定 charset 為 utf-8, Apache 配置 defaultcharset gbk. 頁(yè)面文件是 utf-8

 

<head>

        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>

<body>

        <div id="page-header">

          測(cè)試 Apache DefaultCharset

        </div>

</body>

</html>

結(jié)果還是出現(xiàn)亂碼。

 

結(jié)論:當(dāng) Apache 配置了 DefaultCharset, 將忽略頁(yè)面的 charset 申明。

 

3 PHP header 申明 charset 為 utf8, Apache 配置 defaultcharst gbk, 頁(yè)面文件編碼是 utf8

 

header("Content-Type:text/html; charset=utf-8");

結(jié)果 : 頁(yè)面顯示正常。

 

4 Apache 設(shè)置 DefaultCharset off

 

結(jié)果,頁(yè)面顯示正常。

 

翻閱了下 Apache2 的手冊(cè):

 

AddDefaultCharset 指令

說(shuō)明當(dāng)應(yīng)答內(nèi)容是 text/plain 或 text/html 時(shí),在 HTTP 應(yīng)答頭中加入的默認(rèn)字符集

語(yǔ)法 AddDefaultCharsetOn|Off|charset

默認(rèn)值 AddDefaultCharsetOff

作用域 serverconfig,virtualhost,directory,.htaccess

覆蓋項(xiàng) FileInfo

狀態(tài)核心 (C)

模塊 core

 

當(dāng)且僅當(dāng)應(yīng)答內(nèi)容是 text/plain 或 text/html 時(shí),此指令將會(huì)在 HTTP 應(yīng)答頭中加入的

默認(rèn)字符集。理論上這將覆蓋在文檔體中通過(guò) <meta> 標(biāo) 簽指定的字符集,但是實(shí)際

的行為通常取決于用戶瀏覽器的設(shè)置。 AddDefaultCharsetOff 將會(huì)禁用此功能。

 

AddDefaultCharsetOn 將啟用 Apache 內(nèi)部的默認(rèn)字符集 iso-8859-1 。您

也可以指定使用在 IANA 注冊(cè)過(guò)的字符集名字 中的另外一個(gè) charset 。

比如說(shuō):

AddDefaultCharsetutf-8

也就是說(shuō),當(dāng) Apache 不指定 defaultcharset 的時(shí)候,頁(yè)面編碼由頁(yè)面自己的 meta 標(biāo)簽指定。

 

當(dāng) Apache 指定的時(shí)候,將忽略頁(yè)面中的 meta 標(biāo)簽指定的編碼 . 但是容許腳本直接 header 編碼方式給客戶端

 

最后,還有一個(gè)問(wèn)題沒(méi)有得出結(jié)果:

 

當(dāng) Apache 和頁(yè)面都沒(méi)有指定的時(shí)候, 又如何?

 

我在自己的機(jī)器上,如果都不指定, 默認(rèn)還是 utf8

 

在服務(wù)器端生成 response 內(nèi)容以后 , 如果腳本沒(méi)有顯示的調(diào)用 header 發(fā)送編碼申明 , 那么 Apache 就會(huì)根據(jù) DefaultCharset 生成響應(yīng) HTTP 頭部的 Content-type 中的 charset 字段 ;

 

反之如果腳本顯示申明了 , 那么就會(huì)按照腳本 header 申明中的 charset 設(shè)置 .

 

這樣到了瀏覽器端以后 , 瀏覽器就可以根據(jù) HTTP 頭的 charset 申明來(lái)按照特定的編碼格式解析獲取到的 HTML 代碼 , 但現(xiàn)在的問(wèn)題是 , 頁(yè)面是 GBK 的 , 但是引用的外部 js 文件是 utf8 編碼的 , 這樣的情況 , 我們可以使用一個(gè) script 的屬性來(lái)解決 :

 

  <script language='javascript' src='....'  charset='utf-8'></script>

本文題目:好程序員web前端教程分享js文件引用編碼方式-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)地址:http://www.muchs.cn/article0/pcsio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、企業(yè)建站、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)公司、軟件開(kāi)發(fā)電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)