資源描述:
《史上最全的php+mysql中文亂碼解決方案new》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、我相信PHPmyadmin里查看是亂碼,調(diào)用出來(lái)的話肯定100%也是亂碼。亂碼問(wèn)題其實(shí)也就是編碼不一致導(dǎo)致的。要解決這個(gè)問(wèn)題需要回顧亂碼問(wèn)題出現(xiàn)以前的操作是否使用的是同一種編碼??傊痪湓?,要解決PHP中文亂碼最好最快的解決辦法就是:頁(yè)面申明的編碼與數(shù)據(jù)庫(kù)內(nèi)部編碼一致,如果頁(yè)面申請(qǐng)的頁(yè)碼與數(shù)據(jù)庫(kù)內(nèi)部編碼不一致時(shí),就設(shè)定連接編碼mysql_query(”SETNAMESXXX”);XXX為連接編碼。一定可以解決亂碼的問(wèn)題。在mysql+php程序開(kāi)發(fā)中,總結(jié)了產(chǎn)生亂碼原因:mysql數(shù)據(jù)庫(kù)默認(rèn)的編碼是utf8,如果這種編碼與你的PHP網(wǎng)頁(yè)不一致,可能就會(huì)造成MYSQL亂碼.MYSQL中創(chuàng)建表時(shí)
2、會(huì)讓你選擇一種編碼,如果這種編碼與你的網(wǎng)頁(yè)編碼不一致,也可能造成MYSQL亂碼.MYSQL創(chuàng)建表時(shí)添加字段是可以選擇編碼的,如果這種編碼與你的網(wǎng)頁(yè)編碼不一致,也可能造成MYSQL亂碼.用戶提交頁(yè)面的編碼與顯示數(shù)據(jù)的頁(yè)面編碼不一致,就肯定會(huì)造成PHP頁(yè)面亂碼.如用戶輸入資料的頁(yè)面是big5碼,顯示用戶輸入的頁(yè)面卻是gb2312,這種100%會(huì)造成PHP頁(yè)面亂碼.PHP頁(yè)面字符集不正確.PHP連接MYSQL數(shù)據(jù)庫(kù)語(yǔ)句指定的編碼不正確.一.首先是PHP網(wǎng)頁(yè)的編碼1.php文件本身的編碼與網(wǎng)頁(yè)的編碼應(yīng)匹配a.如果欲使用gb2312編碼,那么php要輸出頭:header(“Content-Type:t
3、ext/html;charset=gb2312″),靜態(tài)頁(yè)面添加,所有文件的編碼格式為ANSI,可用記事本打開(kāi),另存為選擇編碼為ANSI,覆蓋源文件。b.如果欲使用utf-8編碼,那么php要輸出頭:header(“Content-Type:text/html;charset=utf-8″),靜態(tài)頁(yè)面添加,所有文件的編碼格式為utf-8。
4、保存為utf-8可能會(huì)有點(diǎn)麻煩,一般utf-8文件開(kāi)頭會(huì)有BOM,如果使用session就會(huì)出問(wèn)題,可用editplus來(lái)保存,在editplus中,工具->參數(shù)選擇->文件->UTF-8簽名,選擇總是刪除,再保存就可以去掉BOM信息了。二.PHP與Mysql的數(shù)據(jù)交互PHP與數(shù)據(jù)庫(kù)的編碼應(yīng)一致1.修改mysql配置文件my.ini或my.cnf,mysql最好用utf8編碼[mysql]default-character-set=utf8[mysqld]default-character-set=utf8default-storage-engine=MyISAM在[mysqld]下加入:d
5、efault-collation=utf8_bininit_connect=’SETNAMESutf8′2.在需要做數(shù)據(jù)庫(kù)操作的php程序前加mysql_query(”setnames‘編碼’”);,編碼和php編碼一致,如果php編碼是gb2312那mysql編碼就是gb2312,如果是utf-8那mysql編碼就是utf8,這樣插入或檢索數(shù)據(jù)時(shí)就不會(huì)出現(xiàn)亂碼了。三.PHP與操作系統(tǒng)相關(guān)Windows和Linux的編碼是不一樣的,在Windows環(huán)境下,調(diào)用PHP的函數(shù)時(shí)參數(shù)如果是utf-8編碼會(huì)出現(xiàn)錯(cuò)誤,比如move_uploaded_file()、filesize()、readfile
6、()等,這些函數(shù)在處理上傳、下載時(shí)經(jīng)常會(huì)用到,調(diào)用時(shí)可能會(huì)出現(xiàn)下面的錯(cuò)誤:Warning:move_uploaded_file()[function.move-uploaded-file]:failedtoopenstream:Invalidargumentin…Warning:move_uploaded_file()[function.move-uploaded-file]:Unabletomove”to”in…Warning:filesize()[function.filesize]:statfailedfor…in…Warning:readfile()[function.readfil
7、e]:failedtoopenstream:Invalidargumentin..在Linux環(huán)境下用gb2312編碼雖然不會(huì)出現(xiàn)這些錯(cuò)誤,但保存后的文件名出現(xiàn)亂碼導(dǎo)致無(wú)法讀取文件,這時(shí)可先將參數(shù)轉(zhuǎn)換成操作系統(tǒng)識(shí)別的編碼,編碼轉(zhuǎn)換可用mb_convert_encoding(字符串,新編碼,原編碼)或iconv(原編碼,新編碼,字符串),這樣處理后保存的文件名就不會(huì)出現(xiàn)亂碼,也可以正常讀取文件,實(shí)現(xiàn)中文名稱文件