萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php頁面各種編碼設置

php頁面各種編碼設置

   php的header()函數用來定義一個php頁面的編碼(注意:前面不能有任何輸出,否則報錯)

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

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

  用header或meta實現PHP頁面編碼的區別

  一、頁面編碼

  1. 使用 標簽設置頁面編碼

  這個標簽的作用是聲明客戶端的浏覽器用什麼字符集編碼顯示該頁面,xxx可以為GB2312,GBK,UTF-8(和MySQL不同,MySQL是 UTF8)等等。因此,大部分頁面可以采用這種方式來告訴浏覽器顯示這個頁面的時候采用什麼編碼,這樣才不會造成編碼錯誤而產生亂碼。但是有的時候我們會 發現有了這句還是不行,不管xxx是哪一種,浏覽器采用的始終都是一種編碼,這個情況我後面會談到。

  請注意, 是屬於html信息的,僅僅是一個聲明,它起作用表明服務器已經把HTML信息傳到了浏覽器。

  2. 使用 header("content-type:text/html; charset=UTF-8"); 函數設置頁面編碼

  這個函數header()的作用是把括號裡面的信息發到http標頭。

  如果括號裡面的內容為文中所說那樣,那作用和 標簽基本相同,大家對照第一個看發現字符都差不多的。但是不同的是如果有這段 函數,浏覽器就會永遠采用你所要求的xxx編碼,絕對不會不聽話,因此這個函數是很有用的。

  為什麼會這樣呢?那就得說說HTTPS標頭和HTML信息的差別了:

  https標頭是服務器以HTTP協議傳送HTML信息到浏覽器前所送出的字串。

  因為meta標簽是屬於html信息的,所以header()發送的內容先到達浏覽器,通俗點就是header()的優先級高於meta。加入一個php頁面既有header("content-type:text/html; charset=xxx"),又有,浏覽器就只認前者http標頭而不認meta了。當然這個函數只能在php頁面內使用。

  前面不能有任何輸出,一個空格也不行否則報錯:

  Warning: Cannot modify header information - headers already sent by (output started at C:wampwwwtest.php:2) in C:wampwwwtest.php on line 3

  二、數據庫編碼

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

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

  三、PHP頁面編碼統一

  MySQL數據庫編碼、html頁面編碼、PHP或html文件本身編碼要全部一致。

  1、MySQL數據庫編碼:建立數據庫時指定編碼(如gbk_chinese_ci),建立數據表、建立字段、插入數據時不要指定編碼,會自動繼承數據庫的編碼。

  數據庫連接時,也有編碼,可以在連接完數據庫後,執行mysql_query('SET NAMES gbk');//將gbk換成你的編碼,如utf8。

  2、html頁面的編碼,指的是這一行的設置:

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

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

  4、另外要注意的是,Javascript或Flash中傳遞的數據是utf-8編碼,如果數據庫和頁面編碼是gbk,要進行轉碼,然後寫入數據庫。 iconv('utf-8', 'gbk', $content);

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

  四、編碼字符大小寫區別

  (只有mysql裡面,其它地方都推薦用大寫UTF-8、GBK、GB2312)

  只有在MySQL中可以使用“utf-8”的別名“utf8”,但是在其他地方一律使用大寫“UTF-8”。具體為:在命令“mysql_query(set names utf8)”外一律用大寫“UTF-8”。

copyright © 萬盛學電腦網 all rights reserved