php數(shù)據(jù)庫(kù)中文亂碼的解決辦法:1、創(chuàng)建數(shù)據(jù)庫(kù)時(shí),規(guī)定字符類(lèi)型為uft8;2、創(chuàng)建表時(shí),規(guī)定字符類(lèi)型為utf8;3、在PHP的MySQL連接函數(shù)中,添加語(yǔ)句“mysql_query("set names 'utf8'")。
目前創(chuàng)新互聯(lián)公司已為上千多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁(yè)空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、大名網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
數(shù)據(jù)載入的時(shí)候是亂碼還是正常,是從別人機(jī)器上導(dǎo)出數(shù)據(jù)自己恢復(fù)的嗎?
查看下數(shù)據(jù)庫(kù)的字符集編碼,show
vaiables
like
'%char%'
查看下字符集
使用下latin1
因?yàn)樗悄J(rèn)的
,不行就把數(shù)據(jù)庫(kù)刪了重新建立在導(dǎo)入數(shù)據(jù)
PHP連接ACC是一個(gè)比較冷門(mén)的數(shù)據(jù)結(jié)構(gòu)。一般使用php搭配Mysql使用。
access的中文版默認(rèn)是GBK格式的,是無(wú)法改變字符類(lèi)型的,所以用php讀取的時(shí)候會(huì)亂碼。
解決方法是:使用iconv轉(zhuǎn)換
一、使用 iconv函數(shù)制作一個(gè)轉(zhuǎn)碼的自定義從GBK轉(zhuǎn)到UTF-8的函數(shù),如以下代碼:
function enc($c){return iconv('gbk','utf-8',$c);}
二、為了寫(xiě)入數(shù)據(jù)庫(kù)的編碼是符合數(shù)據(jù)庫(kù)需要的,所以我們還要制作一個(gè)從UTF-8轉(zhuǎn)向GBK的函數(shù):
function dec($c){return iconv('utf-8','gb2312',$c);}
制作好了轉(zhuǎn)碼函數(shù),接下就是正常使用了。在從數(shù)據(jù)庫(kù)里面調(diào)數(shù)據(jù)顯示在頁(yè)面的時(shí)候使用enc()函數(shù),從頁(yè)面提交數(shù)據(jù)到數(shù)據(jù)庫(kù)時(shí)使用dec()函數(shù),這樣就可以很好的解決PHP使用UTF-8編碼,ACCESS使用系統(tǒng)默認(rèn)編碼的問(wèn)題了。
從你的截圖來(lái)看應(yīng)該數(shù)據(jù)庫(kù)讀取的數(shù)據(jù)沒(méi)有問(wèn)題,問(wèn)題有可能出在你的前臺(tái)顯示上面,在頁(yè)面輸入的時(shí)候是不是對(duì)應(yīng)的字段取得有問(wèn)題。或許你去的東西根本就沒(méi)有存在于讀出的數(shù)組中。
亂碼一直是困擾PHP初學(xué)者的一個(gè)非常大的問(wèn)題,現(xiàn)在總結(jié)下造成亂碼的原因及解決方法:
一、HTML頁(yè)面編碼:meta http-equiv=content-type content=text/html; charset=utf-8 這里的編碼要和數(shù)據(jù)庫(kù)編碼,及連接數(shù)據(jù)庫(kù)編碼;
二、文件在存儲(chǔ)編碼:比如文件inde.php,改變其存儲(chǔ)編碼為所需編碼。只需用EditPlus等文本編輯軟件 文件另存為,在編碼中選擇正確的編碼(這點(diǎn)很多人都會(huì)忽略);
三、數(shù)據(jù)庫(kù)編碼:比如用的是phpmyadmin 選擇數(shù)據(jù)庫(kù)后,選擇操作選項(xiàng)。下面有一個(gè)整理,這里面也要設(shè)置成統(tǒng)一的編碼;
四、表編碼:操作和第三點(diǎn)類(lèi)似。這里就不重復(fù)了;
五、字段編碼:在建表的建字段的時(shí)候,有個(gè)整理。如果內(nèi)容有漢字,就一定要改成統(tǒng)一的編碼;
六、連接數(shù)據(jù)庫(kù)時(shí)mysql_select_db()后面,要加一句 mysql_query( set names utf8 );
七、 (剛遇到的)本地測(cè)試成功后的網(wǎng)站,傳到網(wǎng)上去,會(huì)有亂碼。可能會(huì)是在本地導(dǎo)出數(shù)據(jù)時(shí)沒(méi)有選擇正確的編碼,所以才會(huì)在導(dǎo)入到web上后有亂碼問(wèn)題。
$text = file_get_contents($filePath);
//$encodType = mb_detect_encoding($text);
define('UTF32_BIG_ENDIAN_BOM', chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF));
define('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00));
define('UTF16_BIG_ENDIAN_BOM', chr(0xFE) . chr(0xFF));
define('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE));
define('UTF8_BOM', chr(0xEF) . chr(0xBB) . chr(0xBF));
$first2 = substr($text, 0, 2);
$first3 = substr($text, 0, 3);
$first4 = substr($text, 0, 3);
$encodType = "";
if ($first3 == UTF8_BOM)
$encodType = 'UTF-8 BOM';
else if ($first4 == UTF32_BIG_ENDIAN_BOM)
$encodType = 'UTF-32BE';
else if ($first4 == UTF32_LITTLE_ENDIAN_BOM)
$encodType = 'UTF-32LE';
else if ($first2 == UTF16_BIG_ENDIAN_BOM)
$encodType = 'UTF-16BE';
else if ($first2 == UTF16_LITTLE_ENDIAN_BOM)
$encodType = 'UTF-16LE';
//下面的判斷主要還是判斷ANSI編碼的·
if ($encodType == '') {//即默認(rèn)創(chuàng)建的txt文本-ANSI編碼的
$content = iconv("GBK", "UTF-8", $text);
} else if ($encodType == 'UTF-8 BOM') {//本來(lái)就是UTF-8不用轉(zhuǎn)換
$content = $text;
} else {//其他的格式都轉(zhuǎn)化為UTF-8就可以了
$content = iconv($encodType, "UTF-8", $text);
}
網(wǎng)站名稱(chēng):php讀數(shù)據(jù)輸出時(shí)亂碼,php數(shù)據(jù)庫(kù)中文亂碼
文章網(wǎng)址:http://m.kartarina.com/article38/hsdgpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、定制網(wǎng)站、用戶體驗(yàn)、標(biāo)簽優(yōu)化、全網(wǎng)營(yíng)銷(xiāo)推廣、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)