瀏覽器,PHP, MYSQL字元編碼的一些記錄

2021-06-08 04:51:05 字數 1858 閱讀 4586

以前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...