欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP 頁(yè)面編碼聲明方法詳解(header或meta)

 更新時(shí)間:2010年03月12日 16:47:35   作者:  
PHP 頁(yè)面編碼聲明與用header或meta實(shí)現(xiàn)PHP頁(yè)面編碼的區(qū)別
php的header來(lái)定義一個(gè)php頁(yè)面為utf編碼或GBK編碼

php頁(yè)面為utf編碼
header("Content-type: text/html; charset=utf-8");

php頁(yè)面為gbk編碼
header("Content-type: text/html; charset=gb2312");

php頁(yè)面為big5編碼
header("Content-type: text/html; charset=big5");

通常情況以上代碼放在php頁(yè)面的首頁(yè)

用header或meta實(shí)現(xiàn)PHP頁(yè)面編碼的區(qū)別
一、頁(yè)面編碼

1. 使用 <META http-equiv="content-type" content="text/html; charset=xxx"> 標(biāo)簽設(shè)置頁(yè)面編碼

這個(gè)標(biāo)簽的作用是聲明客戶端的瀏覽器用什么字符集編碼顯示該頁(yè)面,xxx可以為GB2312,GBK,UTF-8(和MySQL不同,MySQL是 UTF8)等等。因此,大部分頁(yè)面可以采用這種方式來(lái)告訴瀏覽器顯示這個(gè)頁(yè)面的時(shí)候采用什么編碼,這樣才不會(huì)造成編碼錯(cuò)誤而產(chǎn)生亂碼。但是有的時(shí)候我們會(huì) 發(fā)現(xiàn)有了這句還是不行,不管xxx是哪一種,瀏覽器采用的始終都是一種編碼,這個(gè)情況我后面會(huì)談到。

請(qǐng)注意,<meta>是屬于html信息的,僅僅是一個(gè)聲明,它起作用表明服務(wù)器已經(jīng)把HTML信息傳到了瀏覽器。

2. header("content-type:text/html; charset=xxx");

這個(gè)函數(shù)header()的作用是把括號(hào)里面的信息發(fā)到http標(biāo)頭。

如果括號(hào)里面的內(nèi)容為文中所說(shuō)那樣,那作用和<META>標(biāo)簽基本相同,大家對(duì)照第一個(gè)看發(fā)現(xiàn)字符都差不多的。但是不同的是如果有這段 函數(shù),瀏覽器就會(huì)永遠(yuǎn)采用你所要求的xxx編碼,絕對(duì)不會(huì)不聽(tīng)話,因此這個(gè)函數(shù)是很有用的。為什么會(huì)這樣呢?那就得說(shuō)說(shuō)HTTPS標(biāo)頭和HTML信息的差 別了:

https標(biāo)頭是服務(wù)器以HTTP協(xié)議傳送HTML信息到瀏覽器前所送出的字串。

因?yàn)閙eta標(biāo)簽是屬于html信息的,所以header()發(fā)送的內(nèi)容先到達(dá)瀏覽器,通俗點(diǎn)就是header()的優(yōu)先級(jí)高于meta(不知道可 不可以這樣講)。加入一個(gè)php頁(yè)面既有header("content-type:text/html; charset=xxx"),又有<META http-equiv="content-type" content="text/html; charset=xxx">,瀏覽器就只認(rèn)前者h(yuǎn)ttp標(biāo)頭而不認(rèn)meta了。當(dāng)然這個(gè)函數(shù)只能在php頁(yè)面內(nèi)使用。

同樣也留有一個(gè)問(wèn)題,為什么前者就絕對(duì)起作用,而后者有時(shí)候就不行呢?這就是接下來(lái)要談的Apache的原因了。

3. AddDefaultCharset

Apache 根目錄的 conf 文件夾里,有整個(gè)Apache的配置文檔httpd.conf。

用文本編輯器打開(kāi)httpd.conf,第708行(不同版本可能不同)有AddDefaultCharset xxx,xxx為編碼名稱。這行代碼的意思:設(shè)置整個(gè)服務(wù)器內(nèi)的網(wǎng)頁(yè)文件https標(biāo)頭里的字符集為你默認(rèn)的xxx字符集。有這行,就相當(dāng)于給每個(gè)文件都 加了一行header("content-type:text/html; charset=xxx")。這下就明白為什么明明meta設(shè)置了是utf-8,可瀏覽器始終采用gb2312的原因。

如果網(wǎng)頁(yè)里有header("content-type:text/html; charset=xxx"),就把默認(rèn)的字符集改為你設(shè)置的字符集,所以這個(gè)函數(shù)永遠(yuǎn)有用。如果把AddDefaultCharset xxx前面加個(gè)“#”,注釋掉這句,而且頁(yè)面里不含header("content-type…"),那這個(gè)時(shí)候就輪到meta標(biāo)簽起作用了。

總結(jié):

來(lái)個(gè)排序

header("content-type:text/html; charset=xxx")
AddDefaultCharset xxx
<META http-equiv="content-type" content="text/html; charset=xxx">
如果你是web程序員,給你的每個(gè)頁(yè)面都加個(gè)header("content-type:text/html; charset=xxx"),保證它在任何服務(wù)器都能正確顯示,可移植性強(qiáng)。

至于那句AddDefaultCharset xxx,要不要注釋就仁者見(jiàn)仁了。反正我是注釋掉了,不過(guò)我寫頁(yè)子也要寫header(),便于放到服務(wù)器上能正常顯示。

二、數(shù)據(jù)庫(kù)編碼

PHP 程序在查詢數(shù)據(jù)庫(kù)之前,首先執(zhí)行 mysql_query(“SET NAMES xxxx”);其中 xxxx 是你網(wǎng)頁(yè)的編碼(charset=xxxx),如果網(wǎng)頁(yè)中 charset=utf8,則 xxxx=utf8,如果網(wǎng)頁(yè)中 charset=gb2312,則xxxx=gb2312,幾乎所有WEB程序,都有一段連接數(shù)據(jù)庫(kù)的公共代碼,放在一個(gè)文件里,在這文件里,加入 mysql_query(“set names”)就可以了。

SET NAMES 顯示客戶端發(fā)送的 SQL 語(yǔ)句中使用什么字符集。因此,SET NAMES 'utf-8'語(yǔ)句告訴服務(wù)器“將來(lái)從這個(gè)客戶端傳來(lái)的信息采用字符集utf-8”。它還為服務(wù)器發(fā)送回客戶端的結(jié)果指定了字符集。(例如,如果你使用一 個(gè)SELECT語(yǔ)句,它表示列值使用了什么字符集。)

PHP頁(yè)面編碼統(tǒng)一

MySQL數(shù)據(jù)庫(kù)編碼、html頁(yè)面編碼、PHP或html文件本身編碼要全部一致。
  1、MySQL數(shù)據(jù)庫(kù)編碼:建立數(shù)據(jù)庫(kù)時(shí)指定編碼(如gbk_chinese_ci),建立數(shù)據(jù)表、建立字段、插入數(shù)據(jù)時(shí)不要指定編碼,會(huì)自動(dòng)繼承數(shù)據(jù)庫(kù)的編碼。
數(shù)據(jù)庫(kù)連接時(shí),也有編碼,可以在連接完數(shù)據(jù)庫(kù)后,執(zhí)行
mysql_query('SET NAMES gbk');//將gbk換成你的編碼,如utf8。

  2、html頁(yè)面的編碼,指的是這一行的設(shè)置:
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />

  3、PHP或html文件本身的編碼:用editplus打開(kāi)php文件或html文件,另存時(shí),選擇的編碼,如果數(shù)據(jù)庫(kù)和頁(yè)面編碼是gbk,則這兒的編碼選擇ansi;如果數(shù)據(jù)庫(kù)和頁(yè)面編碼是utf-8,則這兒也選擇utf-8。

  4、另外要注意的是,Javascript或Flash中傳遞的數(shù)據(jù)是utf-8編碼,如果數(shù)據(jù)庫(kù)和頁(yè)面編碼是gbk,要進(jìn)行轉(zhuǎn)碼,然后寫入數(shù)據(jù)庫(kù)。
iconv('utf-8', 'gbk', $content);

5、在PHP程序中,可以加上一行,來(lái)指定PHP源程序的編碼:
header('Content-type: text/html; charset=gbk');

相關(guān)文章

  • 簡(jiǎn)單了解WordPress開(kāi)發(fā)中update_option()函數(shù)的用法

    簡(jiǎn)單了解WordPress開(kāi)發(fā)中update_option()函數(shù)的用法

    這篇文章主要介紹了WordPress開(kāi)發(fā)中update_option()函數(shù)的用法,update_option()函數(shù)經(jīng)常被用于更新數(shù)據(jù)庫(kù)中的數(shù)據(jù),需要的朋友可以參考下
    2016-01-01
  • php生成圓角圖片的方法

    php生成圓角圖片的方法

    這篇文章主要介紹了php生成圓角圖片的方法,涉及php操作圖片的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • php析構(gòu)函數(shù)的簡(jiǎn)單使用說(shuō)明

    php析構(gòu)函數(shù)的簡(jiǎn)單使用說(shuō)明

    與構(gòu)造函數(shù)相反,在PHP5中,可以定義一個(gè)名為_(kāi)_destruct()的函數(shù),稱之為PHP5析構(gòu)函數(shù),PHP將在對(duì)象在內(nèi)存中被銷毀前調(diào)用析構(gòu)函數(shù),使對(duì)象在徹底消失之前完成一些工作。對(duì)象在銷毀一般可以通過(guò)賦值為null實(shí)現(xiàn)。
    2015-08-08
  • PHP中的strtr函數(shù)使用介紹(str_replace)

    PHP中的strtr函數(shù)使用介紹(str_replace)

    PHP的 strtr 函數(shù), 性能要比 str_replace 函數(shù)高, 可以代替 str_replace 來(lái)使用
    2011-10-10
  • ThinkPHP6使用JWT+中間件實(shí)現(xiàn)Token驗(yàn)證實(shí)例詳解

    ThinkPHP6使用JWT+中間件實(shí)現(xiàn)Token驗(yàn)證實(shí)例詳解

    這篇文章主要介紹了ThinkPHP6使用JWT+中間件實(shí)現(xiàn)Token驗(yàn)證的方法,結(jié)合實(shí)例形式詳細(xì)分析了JWT的功能、原理及token驗(yàn)證相關(guān)操作技巧,需要的朋友可以參考下
    2023-06-06
  • PHP采集利器 Snoopy 試用心得

    PHP采集利器 Snoopy 試用心得

    Snoopy是一個(gè)php類,用來(lái)模仿web瀏覽器的功能,它能完成獲取網(wǎng)頁(yè)內(nèi)容和發(fā)送表單的任務(wù)。
    2011-07-07
  • PHP函數(shù)preg_match_all正則表達(dá)式的基本使用詳細(xì)解析

    PHP函數(shù)preg_match_all正則表達(dá)式的基本使用詳細(xì)解析

    以下是對(duì)PHP中的函數(shù)preg_match_all正則表達(dá)式的基本使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-08-08
  • php mysql_list_dbs()函數(shù)用法示例

    php mysql_list_dbs()函數(shù)用法示例

    這篇文章主要介紹了php mysql_list_dbs()函數(shù)用法,簡(jiǎn)單介紹了mysql_list_dbs()函數(shù)的功能及列出mysql所有數(shù)據(jù)庫(kù)的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-03-03
  • PHP中用hash實(shí)現(xiàn)的數(shù)組

    PHP中用hash實(shí)現(xiàn)的數(shù)組

    今天回顧學(xué)習(xí)了PHP中變量實(shí)現(xiàn)的方法,在瀏覽其源碼是發(fā)現(xiàn)在PHP中所有的數(shù)據(jù)類型通過(guò)一個(gè)union存儲(chǔ)。php語(yǔ)言是弱類型語(yǔ)言,其實(shí)現(xiàn)中通過(guò)記錄變量的類型和值來(lái)實(shí)現(xiàn)其管理。
    2011-07-07
  • fleaphp rolesNameField bug解決方法

    fleaphp rolesNameField bug解決方法

    fleaphp rolesNameField bug解決方法,需要的朋友可以參考下。
    2011-04-04

最新評(píng)論