糯米文學吧

位置:首頁 > 計算機 > php語言

php各種應用亂碼問題的解決方法

php語言3.08W

在使用php的時候可能會出現各種亂碼問題,那麼這個時候我們要分清楚情況一一解決問題了。下面小編為大家整理了php各種應用亂碼問題的解決方法,希望能幫到大家!

php各種應用亂碼問題的解決方法

  1) 使用 標籤設置頁面編碼

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

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

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

這個函數 header() 的作用是把括號裏面的信息發到 http 標頭。如果括號裏面的內容為文中所説那樣,那作用和 標籤基本相同,大家對照第一個看發現字符都差不多的。但是不同的是如果有這段函數,瀏覽器就會永遠採用你所要求的 xxx 編碼,絕對不會不聽話,因此這個函數是很有用的。為什麼會這樣呢?那就得説説 http 標頭和 HTML信息的差別了:

http 標頭是服務器以 http 協議傳送 HTML 信息到瀏覽器前所送出的字串。而 標籤是屬於 HTML 信息的,所以 header() 發送的內容先到達瀏覽器,通俗點就是 header() 的優先級高於 (不知道可不可以這樣講)。假如一個 php 頁面既有header("content-type:text/html;charset=xxx"),又有,瀏覽器就只認前者 http 標頭而不認 meta 了。當然這個函數只能在 php 頁面內使用。

同樣也留有一個問題,為什麼前者就絕對起作用,而後者有時候就不行呢?這就是接下來要談的Apache 的原因了。

  3) AddDefaultCharset

Apache 根目錄的 conf 文件夾裏,有整個 Apache 的配置文檔 。

用文本編輯器打開 ,第 708 行(不同版本可能不同)有 AddDefaultCharset xxx,xxx為編碼名稱。這行代碼的意思:設置整個服務器內的`網頁文件 http 標頭裏的字符集為你默認的 xxx字符集。有這行,就相當於給每個文件都加了一行 header("content-type:text/html; charset=xxx")。這下就明白為什麼明明 設置了是 utf-8,可瀏覽器始終採用 gb2312 的原因。

如果網頁裏有 header("content-type:text/html; charset=xxx"),就把默認的字符集改為你設置的字符集,所以這個函數永遠有用。如果把 AddDefaultCharset xxx 前面加個"#",註釋掉這句,而且頁面裏不含 header("content-type…"),那這個時候就輪到 meta 標籤起作用了。

下面列出以上的優先順序:

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

.. AddDefaultCharset xxx

如果你是 web 程序員,建議給你的每個頁面都加個header("content-type:text/html;charset=xxx"),這樣就可以保證它在任何服務器都能正確顯示,可移植性也比較強。

 4) 中的 default_charset 配置:

中的 default_charset = "gb2312" 定義了 php 的默認語言字符集。一般推薦註釋掉此行,讓瀏覽器根據網頁頭中的 charset 來自動選擇語言而非做一個強制性的規定,這樣就可以在同台服務器上提供多種語言的網頁服務。

標籤:亂碼 PHP