在使用php mysqli連接數(shù)據(jù)庫(kù)的過(guò)程中,出現(xiàn)亂碼問(wèn)題是比較常見(jiàn)的。當(dāng)我們?cè)趐hp中讀取、修改、插入數(shù)據(jù)庫(kù)中的中文字符時(shí),如果出現(xiàn)亂碼,這會(huì)大大影響我們的數(shù)據(jù)存儲(chǔ)和顯示。下面我會(huì)從幾個(gè)方面來(lái)介紹產(chǎn)生亂碼的原因以及解決方法。
首先,可能是因?yàn)閿?shù)據(jù)庫(kù)的編碼方式和程序的編碼方式不一致導(dǎo)致的亂碼。比如,程序是使用utf-8編碼方式來(lái)解析中文字符,而數(shù)據(jù)庫(kù)卻是使用了gb2312編碼方式來(lái)儲(chǔ)存同樣的中文字符,這時(shí)就會(huì)出現(xiàn)亂碼的狀況。解決這個(gè)問(wèn)題的方法,需要在程序連接數(shù)據(jù)庫(kù)前設(shè)定好字符編碼,如下所示:
//設(shè)置連接數(shù)據(jù)庫(kù)時(shí)的字符編碼 mysqli_query($con,"set names 'utf8'");其次,另一個(gè)導(dǎo)致亂碼問(wèn)題的原因是我們?cè)谧x取數(shù)據(jù)庫(kù)中的中文文本時(shí),沒(méi)有進(jìn)行正確的解碼和編碼。比如,我們?cè)谑褂胢ysqli_fetch_array函數(shù)獲取數(shù)據(jù)庫(kù)記錄時(shí),沒(méi)能遵守正確的字符解碼方式,這就會(huì)導(dǎo)致中文字符亂碼。解決這個(gè)問(wèn)題,需要在使用mysqli_fetch_array函數(shù)獲取數(shù)據(jù)之前,用iconv()函數(shù)進(jìn)行轉(zhuǎn)換,如下所示:
while($row=mysqli_fetch_array($result)){ echo iconv('gbk','utf-8',$row['content']); }除此之外,我們還需要注意其他幾個(gè)常見(jiàn)的問(wèn)題。比如,我們?cè)谙驍?shù)據(jù)庫(kù)中插入中文文本時(shí),也需要設(shè)定好字符編碼方式:
mysqli_query($con,"set character set 'utf8'"); mysqli_query($con,"set names 'utf8'");我們?cè)谠O(shè)定好字符編碼方式之后,還需要保證每一個(gè)php文件都是utf-8編碼的,這樣才能保證程序正常進(jìn)行字符解碼和編碼。 綜上所述,亂碼問(wèn)題是一個(gè)非常煩人的事情,不過(guò)只要設(shè)定好正確的字符編碼、字符解碼和字符編碼方式,就能輕松地解決這個(gè)問(wèn)題。無(wú)論是讀取、修改還是插入中文文本,我們都需要遵守上述的編程規(guī)范,才能更好地進(jìn)行php mysqli開(kāi)發(fā)。