php編碼轉換及問題

來源:互聯網
上載者:User

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

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

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

 

情景:

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

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

一、判斷編碼

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

function is_utf8($string) {   
return preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E]
| [\xC2-\xDF][\x80-\xBF]
| \xE0[\xA0-\xBF][\x80-\xBF]
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}
| \xED[\x80-\x9F][\x80-\xBF]
| \xF0[\x90-\xBF][\x80-\xBF]{2}
| [\xF1-\xF3][\x80-\xBF]{3}
| \xF4[\x80-\x8F][\x80-\xBF]{2}
)*$%xs', $string);
}

這是各種編碼的區間:

$re['utf-8']  = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
$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) {
return preg_match('/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/', $string);
}

 

二、編碼轉換

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

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");

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);

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

 

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

file_get_contents($path);
if(!is_utf8($str)) {
$str = mb_convert_encoding($str, "utf-8", "gbk");
file_put_contents($path, $str);
}

然後就寫入資料庫了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.