php+mysql的utf-8中文亂碼問題的解決方法
長春網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)從2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
問題匯總:
1.mysql數(shù)據(jù)庫默認(rèn)的編碼是utf8,如果這種編碼與你的PHP網(wǎng)頁不一致,可能就會(huì)造成MYSQL亂碼.
2.MYSQL中創(chuàng)建表時(shí)會(huì)讓你選擇一種編碼,如果這種編碼與你的網(wǎng)頁編碼不一致,也可能造成MYSQL亂碼.
3.MYSQL創(chuàng)建表時(shí)添加字段是可以選擇編碼的,如果這種編碼與你的網(wǎng)頁編碼不一致,也可能造成MYSQL亂碼.
4.用戶提交頁面的編碼與顯示數(shù)據(jù)的頁面編碼不一致,就肯定會(huì)造成PHP頁面亂碼.
5.如用戶輸入資料的頁面是big5碼, 顯示用戶輸入的頁面卻是gb2312,這種100%會(huì)造成PHP頁面亂碼.
6.PHP頁面字符集不正確.
7.PHP連接MYSQL數(shù)據(jù)庫語句指定的編碼不正確.
使用mysql+php產(chǎn)生亂碼的原因都了解得很清楚了,那么解決就不困難了.
針對不同問題的解決方法:
1.mysql數(shù)據(jù)庫默認(rèn)的編碼是utf8,如果這種編碼與你的PHP網(wǎng)頁不一致,可能就會(huì)造成MYSQL亂碼.
修改數(shù)據(jù)庫編碼,如果是數(shù)據(jù)庫編碼不正確,可以在phpmyadmin 執(zhí)行如下命令:
Alter DATABASE 'test' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是將test數(shù)據(jù)庫的編碼設(shè)為utf8.
2.MYSQL中創(chuàng)建表時(shí)會(huì)讓你選擇一種編碼,如果這種編碼與你的網(wǎng)頁編碼不一致,也可能造成MYSQL亂碼.
修改表的編碼:
Alter TABLE 'category' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是將一個(gè)表category的編碼改為utf8.
3.MYSQL創(chuàng)建表時(shí)添加字段是可以選擇編碼的,如果這種編碼與你的網(wǎng)頁編碼不一致,也可能造成MYSQL亂碼.
修改字段的編碼:
Alter TABLE 'test' CHANGE 'dd' 'dd' VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
以上命令就是將test表中 dd的字段編碼改為utf8.
4.用戶提交頁面的編碼與顯示數(shù)據(jù)的頁面編碼不一致,就肯定會(huì)造成PHP頁面亂碼.
如果是這種情況容易解決,只需檢查下頁面,修改源文件的charset即可.
5.如用戶輸入資料的頁面是big5碼, 顯示用戶輸入的頁面卻是gb2312,這種100%會(huì)造成PHP頁面亂碼.
這種情況也是修改頁面charset即可.
6.PHP頁面字符集不正確.
為了避免PHP頁面亂碼的發(fā)生,PHP頁面開始第一句
header("content-type:text/html; charset=utf-8");
//強(qiáng)行指定頁面的編碼,以避免亂碼
7.PHP連接MYSQL數(shù)據(jù)庫語句指定的編碼不正確.
在連接數(shù)據(jù)庫的語句中.
mysql_connect('localhost','user','password');
mysql_select_db('my_db');
mysql_query("set names 'utf8'"); //select 數(shù)據(jù)庫之后加多這一句
存數(shù)據(jù)的時(shí)候,需要對字符串進(jìn)行addslashes
()進(jìn)行操作$str=addslashes($str);$sql="insert
into
`tab`
(`content`)
values('$str')";去除數(shù)據(jù)的時(shí)候操作如下$str=stripslashes($str);在頁面顯示時(shí)進(jìn)行如下操作$str=htmlspecialchars(nl2br($str))
;
查看原帖
你的問題可能是數(shù)據(jù)庫連接時(shí)未指定字符集:$conn-query("set names utf8");
詳細(xì)如下:
將中文字符轉(zhuǎn)換一下,可能你的網(wǎng)頁編碼是ansi非utf-8的:
$w=iconv("gb2312","utf-8",$w);
不過我不確定這樣做你能否成功。關(guān)于字符有以下幾點(diǎn)你看下:
數(shù)據(jù)庫連接時(shí): $conn-query("set names gbk");
數(shù)據(jù)庫的字符集:建議建立數(shù)據(jù)庫時(shí)就指定字符集,比如gbk或者utf-8,這樣你就沒必要為單獨(dú)的表或者字段指定字符集
網(wǎng)頁字符:META CONTENT="text/html; charset=gbk" HTTP-EQUIV="Content-Type" /
保持著三者使用的字符集一樣,基本能解決你的問題。
當(dāng)然,在使用ajax時(shí)。js傳遞過來的是utf-8,如果你的php文件和數(shù)據(jù)庫使用的是中文字符集如gbk,gb2312,那么就需要對該值用iconv函數(shù)轉(zhuǎn)換下字符集,如:$w=iconv("utf-8","gb2312",$w);
總之,需要這幾塊的字符集保持一致。
?php
$content="111\n222";
//先替換
$contents=str_replace("\n","br/",$content);
//再輸出即可解決
echo $contents;
?
輸出結(jié)果為:
111
222
當(dāng)前名稱:php數(shù)據(jù)庫字符 php怎么將數(shù)據(jù)庫中的數(shù)據(jù)顯示出來
分享鏈接:http://www.rwnh.cn/article16/ddgojgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、服務(wù)器托管、Google、網(wǎng)站導(dǎo)航、網(wǎng)頁設(shè)計(jì)公司、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)