資源描述:
《網(wǎng)頁中文亂碼完美解決方案》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、網(wǎng)頁中文亂碼既然后面charset設(shè)置為gb2312,那么你打開這個網(wǎng)頁,然后另存,保存的時候記得把編碼改成gb2312,不然的話charset就會誤導(dǎo)瀏覽器,這樣就會亂碼了。2.php編網(wǎng)頁出現(xiàn)亂碼,我把編碼改成utf-8前臺顯示正常了,但是有東西輸入到數(shù)據(jù)庫再提取出來還是不正常3.apache+php+mysql?為何會出現(xiàn)亂碼我們在做PHP項目的時候,經(jīng)常會遇到中文亂碼的問題,有時候編碼問題還導(dǎo)致MYSQL的報錯。中文亂碼總共有三個原因1:AP
2、ACHE服務(wù)器設(shè)置導(dǎo)致亂碼2:PHP,或者HTML頁面編碼導(dǎo)致中文亂碼3:MYSQL數(shù)據(jù)庫的表以及字段編碼導(dǎo)致中文亂碼我們分別從這三個部分來探究PHP程序設(shè)計中的編碼問題在這之前我們要了解一些基本理論:1、文件編碼每個文件在保存的時候都可以選擇以什么編碼保存,例如用WINDOWS的記事本創(chuàng)建一個文件可以選擇ANSI以及UTF8等等編碼。我們選擇了什么編碼該文件就以這種編碼方式保存在硬盤上。讀取該文件數(shù)據(jù)的時候也會指定一種編碼來打開,如果指定的編碼與文件保存的時候的編碼不一樣的話就會出現(xiàn)亂碼2、HTML的編碼在網(wǎng)頁頭部一般有這樣一個區(qū)域這個的意思是讓客戶端知道,接下來輸出的是ht
3、ml代碼(text/html),并且以下輸出的內(nèi)容都將是utf-8編碼的。如果我們用記事本創(chuàng)建一個HTML文件該文件包含但是在保存的時候卻以ANSI編碼格式保存,那么我們用瀏覽器打開這個文件時,瀏覽器看見META行的UTF8編碼設(shè)置后就將文件以UTF8格式輸出,而文件本來是ANSI編碼,這樣便出現(xiàn)了中文亂碼。一:APACHE服務(wù)器編碼在APACHE配置文件中有一行是編碼的設(shè)置默認的是AddDefaultCharsetISO-8859-1,大部分人認為應(yīng)該將這句改為AddDefaultCharsetUTF-8。而蝸牛認為這是誤人子弟。這項配置是告訴APACHE服務(wù)器選用什么樣的編
4、碼來輸出WEB頁面(這樣做會忽略,HTML頁面中的頁面編碼的設(shè)置EG:),如果我們建立一個GB2312的頁面就會出現(xiàn)中文亂碼。所以最好的方法是將AddDefaultCharsetISO-8859-1這一項注釋掉#AddDefaultCharset二:PHP編碼問題php最終生成的是文本文件,而他要從數(shù)據(jù)庫中取出文本數(shù)據(jù),還要把文本數(shù)據(jù)寫到數(shù)據(jù)庫中。由于MYSQL并不知道PHP發(fā)送給他的是什么編碼的數(shù)據(jù),所以需要客戶端PHP告訴他存取的是什么編碼的數(shù)據(jù)。然后MYSQL會自動將PHP傳送來的數(shù)據(jù)轉(zhuǎn)換成目標編碼格式的數(shù)據(jù)。比如:PHP要將文本數(shù)據(jù)DATE寫入到數(shù)據(jù)庫字段field中,
5、PHP發(fā)送的是UTF-8編碼的數(shù)據(jù),而DATE是以GB2312方式存儲的。這時候PHP通過設(shè)置告訴MYSQL我發(fā)的是UTF-8格式,MYSQL接到數(shù)據(jù)后說:”我知道了,來誰專門負責將UTF-8轉(zhuǎn)換成GB2312“于是MYSQL中的一個專門負責此事的小兵跑來把數(shù)據(jù)拿走經(jīng)過加工放到指定位置,如果PHP誤將UTF-8編碼的數(shù)據(jù)當作GB2312編碼送給MYSQL的時候,MYSQL會叫上次那個負責UTF-8—-GB2312的小兵來負責,而小兵不管三七二十一按同樣方法轉(zhuǎn)換存起來,這就出現(xiàn)了錯誤,亂碼就產(chǎn)生了。取數(shù)據(jù)的時候也一樣,PHP要告訴MYSQL要取出什么樣編碼的數(shù)據(jù)。PHP通過cha
6、racter_set_client告訴MYSQL,php存入數(shù)據(jù)庫的是什么編碼方式PHP通過character_set_results告訴MYSQL,php需要取什么樣編碼的數(shù)據(jù)PHP通過character_set_connection告訴MYSQL,PHP查詢中的文本,使用什么編碼就算上面的大家都注意了,還有個問題也可能導(dǎo)致亂碼。那就是PHP文件(生成的HTML頁面)本身的編碼問題如果MYSQL傳來的數(shù)據(jù)編碼與PHP本身編碼不一致也會導(dǎo)致亂碼三:MYSQL編碼問題Mysql目前支持多字符集,并且,支持在不同的字符集之間轉(zhuǎn)換(便于移植和支持多語言)。Mysql可以設(shè)置服務(wù)器級字
7、符集、數(shù)據(jù)庫級字符集、數(shù)據(jù)表級字符集、表列的字符集,實際上,最終使用字符集的地方是存儲字符的列,比如,你設(shè)置table1中col1列是字符類型,col1才用到了字符集,如果table1表的col2列是int類型,col2不使用字符集的概念。服務(wù)器級字符集、數(shù)據(jù)庫級字符集、數(shù)據(jù)表級字符集都是為列的字符集做默認選項的。Mysql一定有一個字符集,可以通過啟動時加參數(shù)指定,也可以編譯時指定,也可以在配置文件里指定。Mysql服務(wù)器字符集,只是做為數(shù)據(jù)庫級的默認值。創(chuàng)建數(shù)據(jù)庫時,你可以指定字符集,如