1.為什么會出現亂碼?
出現亂碼問題的原因,一般都是頁面的中文字符的編碼格式與瀏覽器編碼格式不符。這個時候需要我們去調整頁面的編碼格式。下面我們來看看處理這類問題的方法:
2.頁面亂碼解決辦法
一般我們會采用在PHP 頁面聲明編碼方法去處理中文亂碼問題,主要采用header和meta方法解決。下面我們來看下這兩者的區別
2.1Meta頁面編碼
使用 <META http-equiv="content-type" content="text/html; charset=xxx"> 標簽設置頁面編碼
這個標簽的作用是聲明客戶端的瀏覽器用什么字符集編碼顯示該頁面,xxx可以為GB2312,GBK,UTF-8(和MySQL不同,MySQL是 UTF8)等等。因此,大部分頁面可以采用這種方式來告訴瀏覽器顯示這個頁面的時候采用什么編碼,這樣才不會造成編碼錯誤而產生亂碼。但是有的時候我們會 發現有了這句還是不行,不管xxx是哪一種,瀏覽器采用的始終都是一種編碼,這個情況我后面會談到。
請注意,<meta>是屬於html信息的,僅僅是一個聲明,它起作用表明服務器已經把HTML信息傳到了瀏覽器。
2.2Header函數
<?php header("content-type:text/html; charset=xxx"); ?>
這個函數header()的作用是把括號里面的信息發到http標頭。如果括號里面的內容為文中所說那樣,那作用和<META>標簽基本相同,大家對照第一個看發現字符都差不多的。但是不同的是如果有這段 函數,瀏覽器就會永遠采用你所要求的xxx編碼,絕對不會不聽話,因此這個函數是很有用的。為什么會這樣呢?那就得說說HTTPS標頭和HTML信息的差別了: https標頭是服務器以HTTP協議傳送HTML信息到瀏覽器前所送出的字串。
因為meta標簽是屬於html信息的,所以header()發送的內容先到達瀏覽器,通俗點就是header()的優先級高於meta(不知道可 不可以這樣講)。加入一個php頁面既有header("content-type:text/html; charset=xxx"),又有<META http-equiv="content-type" content="text/html; charset=xxx">,瀏覽器就只認前者http標頭而不認meta了。當然這個函數只能在php頁面內使用。
推薦大家使用 <?php header("Content-type: text/html; charset=utf-8"); ?> , 靈活機動.