相關(guān)資訊
本類常用軟件
-
福建農(nóng)村信用社手機銀行客戶端下載下載量:584204
-
Windows優(yōu)化大師下載量:416918
-
90美女秀(視頻聊天軟件)下載量:366961
-
廣西農(nóng)村信用社手機銀行客戶端下載下載量:365699
-
快播手機版下載量:325855
php頁面各種編碼設(shè)置教程
2013/3/22 22:51:22 出處:本站原創(chuàng) 人氣:569次 字號:小 中 大
每日一囧
php的header()函數(shù)用來定義一個php頁面的編碼(注意:前面不能有任何輸出,否則報錯)
php頁面為utf8編碼:header("Content-type: text/html; charset=UTF-8");
php頁面為gbk編碼:header("Content-type: text/html; charset=GBK");
用header或meta實現(xiàn)PHP頁面編碼的區(qū)別
一、頁面編碼
1. 使用 <META http-equiv="content-type" content="text/html; charset=UTF-8"> 標(biāo)簽設(shè)置頁面編碼
這個標(biāo)簽的作用是聲明客戶端的瀏覽器用什么字符集編碼顯示該頁面,xxx可以為GB2312,GBK,UTF-8(和MySQL不同,MySQL是 UTF8)等等。因此,大部分頁面可以采用這種方式來告訴瀏覽器顯示這個頁面的時候采用什么編碼,這樣才不會造成編碼錯誤而產(chǎn)生亂碼。但是有的時候我們會 發(fā)現(xiàn)有了這句還是不行,不管xxx是哪一種,瀏覽器采用的始終都是一種編碼,這個情況我后面會談到。
請注意,<meta>是屬于html信息的,僅僅是一個聲明,它起作用表明服務(wù)器已經(jīng)把HTML信息傳到了瀏覽器。
2. 使用 header("content-type:text/html; charset=UTF-8"); 函數(shù)設(shè)置頁面編碼
這個函數(shù)header()的作用是把括號里面的信息發(fā)到http標(biāo)頭。
如果括號里面的內(nèi)容為文中所說那樣,那作用和<META>標(biāo)簽基本相同,大家對照第一個看發(fā)現(xiàn)字符都差不多的。但是不同的是如果有這段 函數(shù),瀏覽器就會永遠(yuǎn)采用你所要求的xxx編碼,絕對不會不聽話,因此這個函數(shù)是很有用的。
為什么會這樣呢?那就得說說HTTPS標(biāo)頭和HTML信息的差別了:
https標(biāo)頭是服務(wù)器以HTTP協(xié)議傳送HTML信息到瀏覽器前所送出的字串。
因為meta標(biāo)簽是屬于html信息的,所以header()發(fā)送的內(nèi)容先到達瀏覽器,通俗點就是header()的優(yōu)先級高于meta。加入一個php頁面既有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)然這個函數(shù)只能在php頁面內(nèi)使用。
前面不能有任何輸出,一個空格也不行否則報錯:
Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\test.php:2) in C:\wamp\www\test.php on line 3
二、數(shù)據(jù)庫編碼
PHP 程序在查詢數(shù)據(jù)庫之前,首先執(zhí)行 mysql_query(“SET NAMES xxxx”);其中 xxxx 是你網(wǎng)頁的編碼(charset=xxxx),如果網(wǎng)頁中 charset=utf8,則 xxxx=utf8,如果網(wǎng)頁中 charset=gb2312,則xxxx=gb2312,幾乎所有WEB程序,都有一段連接數(shù)據(jù)庫的公共代碼,放在一個文件里,在這文件里,加入 mysql_query(“set names”)就可以了。
SET NAMES 顯示客戶端發(fā)送的 SQL 語句中使用什么字符集。因此,SET NAMES 'utf-8'語句告訴服務(wù)器“將來從這個客戶端傳來的信息采用字符集utf-8”。它還為服務(wù)器發(fā)送回客戶端的結(jié)果指定了字符集。(例如,如果你使用一 個SELECT語句,它表示列值使用了什么字符集。)
三、PHP頁面編碼統(tǒng)一
MySQL數(shù)據(jù)庫編碼、html頁面編碼、PHP或html文件本身編碼要全部一致。
1、MySQL數(shù)據(jù)庫編碼:建立數(shù)據(jù)庫時指定編碼(如gbk_chinese_ci),建立數(shù)據(jù)表、建立字段、插入數(shù)據(jù)時不要指定編碼,會自動繼承數(shù)據(jù)庫的編碼。
數(shù)據(jù)庫連接時,也有編碼,可以在連接完數(shù)據(jù)庫后,執(zhí)行mysql_query('SET NAMES gbk');//將gbk換成你的編碼,如utf8。
2、html頁面的編碼,指的是這一行的設(shè)置:
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
3、PHP或html文件本身的編碼:用editplus打開php文件或html文件,另存時,選擇的編碼,如果數(shù)據(jù)庫和頁面編碼是gbk,則這兒的編碼選擇ansi;如果數(shù)據(jù)庫和頁面編碼是utf-8,則這兒也選擇utf-8。
4、另外要注意的是,Javascript或Flash中傳遞的數(shù)據(jù)是utf-8編碼,如果數(shù)據(jù)庫和頁面編碼是gbk,要進行轉(zhuǎn)碼,然后寫入數(shù)據(jù)庫。 iconv('utf-8', 'gbk', $content);
5、在PHP程序中,可以加上一行,來指定PHP源程序的編碼: header('Content-type: text/html; charset=gbk');
四、編碼字符大小寫區(qū)別
(只有mysql里面,其它地方都推薦用大寫UTF-8、GBK、GB2312)
只有在MySQL中可以使用“utf-8”的別名“utf8”,但是在其他地方一律使用大寫“UTF-8”。具體為:在命令“mysql_query(set names utf8)”外一律用大寫“UTF-8”。
php頁面為utf8編碼:header("Content-type: text/html; charset=UTF-8");
php頁面為gbk編碼:header("Content-type: text/html; charset=GBK");
用header或meta實現(xiàn)PHP頁面編碼的區(qū)別
一、頁面編碼
1. 使用 <META http-equiv="content-type" content="text/html; charset=UTF-8"> 標(biāo)簽設(shè)置頁面編碼
這個標(biāo)簽的作用是聲明客戶端的瀏覽器用什么字符集編碼顯示該頁面,xxx可以為GB2312,GBK,UTF-8(和MySQL不同,MySQL是 UTF8)等等。因此,大部分頁面可以采用這種方式來告訴瀏覽器顯示這個頁面的時候采用什么編碼,這樣才不會造成編碼錯誤而產(chǎn)生亂碼。但是有的時候我們會 發(fā)現(xiàn)有了這句還是不行,不管xxx是哪一種,瀏覽器采用的始終都是一種編碼,這個情況我后面會談到。
請注意,<meta>是屬于html信息的,僅僅是一個聲明,它起作用表明服務(wù)器已經(jīng)把HTML信息傳到了瀏覽器。
2. 使用 header("content-type:text/html; charset=UTF-8"); 函數(shù)設(shè)置頁面編碼
這個函數(shù)header()的作用是把括號里面的信息發(fā)到http標(biāo)頭。
如果括號里面的內(nèi)容為文中所說那樣,那作用和<META>標(biāo)簽基本相同,大家對照第一個看發(fā)現(xiàn)字符都差不多的。但是不同的是如果有這段 函數(shù),瀏覽器就會永遠(yuǎn)采用你所要求的xxx編碼,絕對不會不聽話,因此這個函數(shù)是很有用的。
為什么會這樣呢?那就得說說HTTPS標(biāo)頭和HTML信息的差別了:
https標(biāo)頭是服務(wù)器以HTTP協(xié)議傳送HTML信息到瀏覽器前所送出的字串。
因為meta標(biāo)簽是屬于html信息的,所以header()發(fā)送的內(nèi)容先到達瀏覽器,通俗點就是header()的優(yōu)先級高于meta。加入一個php頁面既有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)然這個函數(shù)只能在php頁面內(nèi)使用。
前面不能有任何輸出,一個空格也不行否則報錯:
Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\test.php:2) in C:\wamp\www\test.php on line 3
二、數(shù)據(jù)庫編碼
PHP 程序在查詢數(shù)據(jù)庫之前,首先執(zhí)行 mysql_query(“SET NAMES xxxx”);其中 xxxx 是你網(wǎng)頁的編碼(charset=xxxx),如果網(wǎng)頁中 charset=utf8,則 xxxx=utf8,如果網(wǎng)頁中 charset=gb2312,則xxxx=gb2312,幾乎所有WEB程序,都有一段連接數(shù)據(jù)庫的公共代碼,放在一個文件里,在這文件里,加入 mysql_query(“set names”)就可以了。
SET NAMES 顯示客戶端發(fā)送的 SQL 語句中使用什么字符集。因此,SET NAMES 'utf-8'語句告訴服務(wù)器“將來從這個客戶端傳來的信息采用字符集utf-8”。它還為服務(wù)器發(fā)送回客戶端的結(jié)果指定了字符集。(例如,如果你使用一 個SELECT語句,它表示列值使用了什么字符集。)
三、PHP頁面編碼統(tǒng)一
MySQL數(shù)據(jù)庫編碼、html頁面編碼、PHP或html文件本身編碼要全部一致。
1、MySQL數(shù)據(jù)庫編碼:建立數(shù)據(jù)庫時指定編碼(如gbk_chinese_ci),建立數(shù)據(jù)表、建立字段、插入數(shù)據(jù)時不要指定編碼,會自動繼承數(shù)據(jù)庫的編碼。
數(shù)據(jù)庫連接時,也有編碼,可以在連接完數(shù)據(jù)庫后,執(zhí)行mysql_query('SET NAMES gbk');//將gbk換成你的編碼,如utf8。
2、html頁面的編碼,指的是這一行的設(shè)置:
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
3、PHP或html文件本身的編碼:用editplus打開php文件或html文件,另存時,選擇的編碼,如果數(shù)據(jù)庫和頁面編碼是gbk,則這兒的編碼選擇ansi;如果數(shù)據(jù)庫和頁面編碼是utf-8,則這兒也選擇utf-8。
4、另外要注意的是,Javascript或Flash中傳遞的數(shù)據(jù)是utf-8編碼,如果數(shù)據(jù)庫和頁面編碼是gbk,要進行轉(zhuǎn)碼,然后寫入數(shù)據(jù)庫。 iconv('utf-8', 'gbk', $content);
5、在PHP程序中,可以加上一行,來指定PHP源程序的編碼: header('Content-type: text/html; charset=gbk');
四、編碼字符大小寫區(qū)別
(只有mysql里面,其它地方都推薦用大寫UTF-8、GBK、GB2312)
只有在MySQL中可以使用“utf-8”的別名“utf8”,但是在其他地方一律使用大寫“UTF-8”。具體為:在命令“mysql_query(set names utf8)”外一律用大寫“UTF-8”。
熱門評論
最新評論