php html頁面中文亂碼問題的解決辦法:1、在前端通過“”設(shè)置整個頁面的字符編碼;2、在php中通過“header("content-type:text/html; charset=xxx");”設(shè)置字符即可。
本教程操作環(huán)境:Windows10系統(tǒng)、PHP8.1版、DELL G3電腦
php html頁面中文亂碼問題怎么解決?
前端網(wǎng)頁、php與mysql數(shù)據(jù)庫字符編碼(解決中文等亂碼問題
web開發(fā)中經(jīng)常涉及前端網(wǎng)頁——php——mysql之間的數(shù)據(jù)交互,當(dāng)數(shù)據(jù)只有英文時通常不會有什么問題,但一旦涉及中文,三個地方的某一處字符編碼不一致(如,網(wǎng)頁使用的時gbk而mysql使用utf-8)就有可能導(dǎo)致亂碼的出現(xiàn)。
(注:關(guān)于字符編碼請參見百度百科:http://baike.baidu.com/view/1204863.htm?fr=aladdin)
前端網(wǎng)頁編碼:
通常我們都認(rèn)為可以通過<head>標(biāo)簽內(nèi)的<meta>項(如<META http-equiv="content-type" content="text/html; charset=xxx">)來設(shè)置整個頁面的字符編碼。大部分頁面可以采用這種方式來告訴瀏覽器顯示這個頁面的時候采用什么編碼,但是有的時候我們會發(fā)現(xiàn)有了這句還是不行,不管xxx是哪一種,瀏覽器采用的始終都是一種編碼。
這種情況涉及到http協(xié)議通信中的頭部(header)部分,實際上,用戶瀏覽網(wǎng)頁時,服務(wù)器發(fā)送給用戶的內(nèi)容不僅包括我們的網(wǎng)頁(包括html/css/js這些代碼內(nèi)容),還包括被稱為頭部(header)的描述性內(nèi)容,這些內(nèi)容會告知客戶端將要接收的數(shù)據(jù)的類型(是html還是純文本還是多媒體文件等)、大小、來源等信息(如果想要看一下這些信息,可以使用telnet工具(而不是通過瀏覽器)按照http協(xié)議自己發(fā)起get等請求試試)。由于頭部是優(yōu)先于html發(fā)送的,<meta>作為html的一部分其優(yōu)先級也低于頭部,如果在頭部中已經(jīng)包含了有關(guān)網(wǎng)頁字符編碼的描述,瀏覽器最終就會按頭部中說明的字符編碼集來解析網(wǎng)頁。
在php中,可以使用 header("content-type:text/html; charset=xxx"); 來發(fā)送關(guān)于字符集的頭部。
而對于apache服務(wù)器來說,它具有一個AddDefaultCharset的功能,也就是會為每個發(fā)送的網(wǎng)頁按照服務(wù)器默認(rèn)的字符集設(shè)定好對應(yīng)頭部。
查看/etc/apache2/httpd.conf(2.4之前)或/etc/apache2/conf-available/charset.conf(2.4及以后),里面有一句AddDefaultCharset xxx如果這一句未處于注釋狀態(tài),那么為每個網(wǎng)頁添加默認(rèn)字符集頭部的功能就處于開啟狀態(tài),此時單獨設(shè)置<meta>標(biāo)簽里的字符集便沒有效果。
注意:html頁面所標(biāo)明的編碼方式應(yīng)該與實際在編寫html頁面(其實就是純文本)時保存所用的編碼方式一致。
一般而言,為了兼容中文甚至