我有幾個PHP頁面使用以下代碼在HTML頁面中回顯各種內容。使用PHP設置HTTP標頭爲UTF-8使用PHP
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
然而,當我驗證使用W3C validator談到了:
在HTTP報頭(ISO-8859-1)中指定的字符編碼距離值不同的元件( UTF-8)。
我對PHP很陌生,我想知道如果我可以並且應該更改PHP文件的標題以匹配HTML文件。
我有幾個PHP頁面使用以下代碼在HTML頁面中回顯各種內容。使用PHP設置HTTP標頭爲UTF-8使用PHP
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
然而,當我驗證使用W3C validator談到了:
在HTTP報頭(ISO-8859-1)中指定的字符編碼距離值不同的元件( UTF-8)。
我對PHP很陌生,我想知道如果我可以並且應該更改PHP文件的標題以匹配HTML文件。
使用header
修改HTTP標頭:
header('Content-Type: text/html; charset=utf-8');
注前的任何輸出已經被髮送到客戶端調用這個函數。否則標題也被髮送了,你顯然不能再改變它了。你可以用headers_sent
來檢查。有關更多信息,請參閱manual page of header
。
首先確保PHP文件本身編碼爲UTF-8。
元標記被某些瀏覽器忽略。如果你只使用ASCII字符,反正無所謂。
http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
header('Content-Type: text/html; charset=utf-8');
這是您的Web服務器發出一個HTTP標頭不匹配您定義的一個問題。有關如何使服務器發送正確標題的說明,請參閱this page。
否則,你也可以使用PHP來修改標題,但是這必須完成之前使用該代碼的輸出任何文本:如何使用PHP可以發出頭
header('Content-Type: text/html; charset=utf-8');
要正確實施,您需要更改一系列的東西。
數據庫(連接後):
mysql_query("SET NAMES utf8");
//Meta tag HTML.(probably its already set):
meta charset="utf-8"
header php.(before any output of the HTML):
header('Content-Type: text/html; charset=utf-8')
table-rows-charset(for each row):
utf8_unicode_ci
PHP自動發送頭,如果設置了內部編碼
ini_set('default_charset', 'utf-8');
我想補充一點,當你正確設置HTTP頭這樣,你根本不需要'`標籤。 – Jon 2010-11-25 16:55:55
@Jon:我會使用兩者。當HTML文檔沒有通過HTTP加載(例如從磁盤加載)時,使用與HTTP等效的META。 – Gumbo 2010-11-25 16:59:09
這將只在你執行php時才起作用,爲靜態頁面做,你應該保存你的html文件爲utf-8。這樣做會將BOM字符utf-8編碼添加到文件的開頭。字節0xEF,0xBB,0xBF添加到文件的開頭。大多數Web服務器都會注意到這一點,並應用適當的標題事實上,將你的php文件保存爲utf-8,可以達到同樣的效果。 – Rahly 2010-11-25 16:59:26