亂碼一直是困擾PHP初學(xué)者的一個(gè)非常大的問題,現(xiàn)在總結(jié)下造成亂碼的原因及解決方法:
在巍山等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),營銷型網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站制作,巍山網(wǎng)站建設(shè)費(fèi)用合理。
一、HTML頁面編碼:meta http-equiv=content-type content=text/html; charset=utf-8 這里的編碼要和數(shù)據(jù)庫編碼,及連接數(shù)據(jù)庫編碼;
二、文件在存儲(chǔ)編碼:比如文件inde.php,改變其存儲(chǔ)編碼為所需編碼。只需用EditPlus等文本編輯軟件 文件另存為,在編碼中選擇正確的編碼(這點(diǎn)很多人都會(huì)忽略);
三、數(shù)據(jù)庫編碼:比如用的是phpmyadmin 選擇數(shù)據(jù)庫后,選擇操作選項(xiàng)。下面有一個(gè)整理,這里面也要設(shè)置成統(tǒng)一的編碼;
四、表編碼:操作和第三點(diǎn)類似。這里就不重復(fù)了;
五、字段編碼:在建表的建字段的時(shí)候,有個(gè)整理。如果內(nèi)容有漢字,就一定要改成統(tǒng)一的編碼;
六、連接數(shù)據(jù)庫時(shí)mysql_select_db()后面,要加一句 mysql_query( set names utf8 );
七、 (剛遇到的)本地測試成功后的網(wǎng)站,傳到網(wǎng)上去,會(huì)有亂碼??赡軙?huì)是在本地導(dǎo)出數(shù)據(jù)時(shí)沒有選擇正確的編碼,所以才會(huì)在導(dǎo)入到web上后有亂碼問題。
?php??
echo?'pimg?src="centergoods.php?action=showid='.$val['id'].'t='.time().'"?width="150"/p';??
header('content-type:'.$b['type']);?
echo?$b['pic'];
................
以上代碼在header發(fā)送之前有個(gè)echo輸出了一串字符串.有些header信息要求先發(fā)送,之前不能有其他輸出.你將header這句放在echo輸出之前.
另外,在上面一段代碼中,你將上傳的圖片數(shù)據(jù)直接保存到數(shù)據(jù)庫中,然后在下面取出來直接發(fā)送給瀏覽器,這是什么邏輯?你發(fā)送出去的將是圖片的原始數(shù)據(jù),瀏覽器就是按原樣顯示,一堆亂碼.如果你要讓它知道這是一張圖片,你也得使用header來標(biāo)識(shí)這是圖片類型的文件.當(dāng)然最后是一個(gè)單獨(dú)的php文件處理并輸出圖片格式的數(shù)據(jù)供img調(diào)用.
數(shù)據(jù)庫采用UTF8編碼,而頁面申明編碼是GB2312,這是最常見的產(chǎn)生亂碼的原因。這時(shí)候在PHP腳本里面直接SELECT數(shù)據(jù)出來的就是亂碼,需要在查詢前先使用:mysql_query("SET NAMES GBK");或mysql_query("SET NAMES GB2312");來設(shè)定MYSQL連接編碼,保證頁面申明編碼與這里設(shè)定的連接編碼一致(GBK是GB2312的擴(kuò)展)。如果頁面是UTF-8編碼的話,可以用:mysql_query("SET NAMES UTF8"); 注意是UTF8而不是一般用的UTF-8。假如頁面申明的編碼與數(shù)據(jù)庫內(nèi)部編碼一致可以不設(shè)定連接編碼。
事實(shí)上MYSQL配置文件my.ini中定義了2個(gè)默認(rèn)編碼,分別是[client]里的default-character-set和[mysqld]里的default-character-set來分別設(shè)定默認(rèn)時(shí)候客戶端連接和數(shù)據(jù)庫內(nèi)部所采用的編碼。上面指定的編碼其實(shí)是MYSQL客戶端連接服務(wù)器時(shí)候的命令行參數(shù)character_set_client,來告訴MYSQL服務(wù)器接受到的客戶端數(shù)據(jù)是什么編碼的,而不是采用默認(rèn)編碼。
轉(zhuǎn)自:
這個(gè)可能是你在安裝環(huán)境的時(shí)候出現(xiàn)了問題,在安裝mysql的時(shí)候,數(shù)據(jù)庫默認(rèn)的不是gb2312,是西歐字符,建議你重新安裝數(shù)據(jù)庫,或是使用wampsever集成安裝環(huán)境,默認(rèn)數(shù)據(jù)庫是utf8的,只要你建的數(shù)據(jù)庫整理為utf8
網(wǎng)頁文件也保存為utf8的
(不要bom頭的那種)以后寫php就很少出現(xiàn)問題啦。要是在php文件的最上面一行再加上這么一句代碼,?php
header("Content-Type:text/html;
charset=utf-8");?,那出現(xiàn)問題的幾率就更小了。
//mysql_query("SET NAMES '您網(wǎng)頁的編碼'");
這句打開
mysql_query("SET NAMES 'gb2312’");
保證文件的編碼,瀏覽器解析編碼。數(shù)據(jù)庫數(shù)據(jù)輸出編碼一致就可以了。先把mysql的數(shù)據(jù)庫編碼設(shè)為utf8。
另存為保存文件編碼為utf8
使用header("content-type:text/html;charset=utf-8"); 或者meta http-equiv="content-type" content="text/html;charset=utf-8" / 告訴瀏覽器解析文件的編碼
數(shù)據(jù)輸出前? mysql_query("set names utf8"); 將數(shù)據(jù)庫輸出到網(wǎng)頁中的編碼設(shè)為utf8.