php編碼轉換及問題

2021-06-05 19:55:42 字數 1732 閱讀 4277

首先,編碼,在大陸,最常見的也就兩種,一種是utf-8,一種是gbk/gb2312。

gb2312是簡體中文編碼。gbk/gb2312是中文編碼,二者是相對相容的。

資料庫儲存資料,一般採用utf8編碼方式。而常常我們windows系統預設的編碼方式是gb2312,這就出現了編碼不統一的問題。

情景:寫入資料庫。此時:我們需要將編碼改為utf8後,才能往資料庫儲存。

其實,只需要簡單的三步:判斷編碼,編碼轉換,寫入資料庫。(僅提供gbk/gb2312 與 utf8編碼之間的轉換,其他非主流類似處理即可)

一、判斷編碼

有很多種方式,我現在用的是這種:

function is_utf8($string) 

| \xed[\x80-\x9f][\x80-\xbf]

| \xf0[\x90-\xbf][\x80-\xbf]

| [\xf1-\xf3][\x80-\xbf]

| \xf4[\x80-\x8f][\x80-\xbf]

)*$%xs', $string);

}

這是各種編碼的區間:

$re['utf-8']  = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]|[\xf0-\xff][\x80-\xbf]/";

$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";

$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";

$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";

通過此函式,稍作修改即可:

function is_utf8($string) |[\xf0-\xff][\x80-\xbf]/', $string);

}

二、編碼轉換

編碼轉換一般有三種方式:1、iconv  2、mbstring擴充套件 3、自寫轉換函式

1、iconv轉換

//utf-8 to gb2312

//utf-8轉換時有小bug,請在第二個引數後加"//ignore"

iconv("utf-8","gb2312//ignore",$data)

//gb2312 to utf-8

iconv('gb2312', 'utf-8', $str);

2、因為我php開啟了mbstring擴充套件,我使用的是此方式。

//utf-8 to gb2312

$str = mb_convert_encoding("楊森", "gb2312", "utf-8");

//gbk to utf-8

$str = mb_convert_encoding($str, "utf-8", "gbk");

3、自寫轉換函式,我還沒自己寫過,沒有自己的,寫上來也是網上查詢所得。所以建議網上自行查詢。

4、如果牽涉到檔案上傳的編碼,可使用以上函式直接讀入然後寫入即可。

file_get_contents($path);

if(!is_utf8($str))

然後就寫入資料庫了。

詳談PHP編碼轉換問題

最近恰好要用到unicode編碼的轉換,就去查了一下php的庫函式,居然沒找到乙個函式可以對字串進行unicode的編碼和解碼!也罷,找不到的話就自己實現一下了。unicode和utf 8編碼的區別 unicode是乙個字符集,而utf 8是unicode的其中一種,unicode是定長的都為雙位元...

php 轉換中文亂碼,php中文編碼轉換問題

php中文編碼轉換的方法 1 使用iconv函式,為 string iconv string in string out string str 2 使用 mb convert encoding 函式。php中文編碼轉換的方法 一 iconvstring iconv string in charset...

PHP編碼轉換

php編碼轉換函式mb convert encoding與iconv的使用說明 文章分類 php程式設計 mb convert encodeing gbk to utf 8 例 php php header content type text html charset utf 8 echo mb c...