以前php/mysql的時候就耳聞過一些中文編碼的問題,不過一直都是前後統一的unicode編碼,所以也沒遇到太多問題。這次正式入職,公司mysql使用的是gb2312的字符集,因此在插入中文的時候也遇到了一些問題。
插入流程:
1、前台發起新增資料請求,資料中包含中文,編碼為unicode;
2、後台php指令碼通過$_post獲得中文資料,接著直接插入到資料庫中型別為text的字段;
插入結果:資料庫中的字段顯示的中文為亂碼。
此時想當然的以為儲存的字串是以位元組流形式儲存,讀取的時候根據編碼轉換就行
查詢流程:
在資料庫字段中文亂碼的情況下,php指令碼獲得相關字段,此時直接輸出頁面依然為亂碼;
結果:徹底推翻了插入流程時的想法。
為此做了乙個簡單的測試demo:
資料庫:test, 資料表:test只包含乙個型別為text的des欄位
test.html頁面**如下:
<
input id
="send"
type
="button"
value
="send"
/>
<
input id
="show"
type
="button"
value
="show"
/>
<
script
>
document
.getelementbyid(
'send'
).onclick
= function
();document
.getelementbyid(
'show'
).onclick
= function
()xhr.open(
'post'
,'test.php'
, true
);xhr.send(
null
);};
script
>
send按鈕用post方法提交資料,show按鈕則查詢資料。
test.php頁面**如下:
$db_host
= '127.0.0.1'
; $user
= 'root'
; $pwd
= ''
; $conn
= mysql_connect
( $db_host
, $user
, $pwd
);$database
= mysql_select_db
( 'test'
, $conn
); if
( isset
( $_post
[ 'des'
] ))
else
也就是根據請求字段判斷是插入操作還是查詢操作。
對應前面描述的插入流程與查詢流程。
解決方案:
在運算元據前加入一句:
mysql_set_charset
( 'gb2312'
);同時用iconv將字串轉為gb2312編碼。
這樣資料庫的字段就正常了~~,同時查詢出來的中文字段也正常了~
不過具體原理有待搞明白。
上面只是主要問題中的乙個,接下來的問題則是json_encode的問題:
由於取出的字串編碼不是unicode,而json_encode只能對unicode進行編碼,因此對於非unicode字串,只會編碼為null。
因此還需要用iconv將字串轉為utf8編碼,才能用json_encode。
瀏覽器編碼問題
今天在google瀏覽器的位址列輸入韓語教學,回車,開啟關於韓語教學的網頁,在google瀏覽器的控制台輸入document.url,結果出來的是 e9 9f a9 e8 af ad e6 95 99 e5 ad a6 在safari瀏覽器中則是 在ie瀏覽器中則只針對空格進行了編碼,仍然顯示的中文...
瀏覽器URL編碼
1 瀏覽器編碼 ie6.0及以前版本,通過在位址列裡輸入url時,使用的預設編碼是gbk ie7.0 ie8版本,通過在位址列裡輸入url時,使用的預設編碼是utf 8,也可以在工具 高階選項裡修改 2 中文引數編碼例項 string version request.getheader user a...
Lynx字元瀏覽器移植
華清遠見嵌入式學院 講師。一 環境 主機 ubuntu 8.10 目標機 s3c6410 主機編譯器 gcc 目標機編譯器 arm none linux gnueabi gcc 二 準備工作 為了使目標板能夠正常上網,我們做如下設定 1 在profile中新增如下內容 ifconfig eth0 1...