首先,編碼,在大陸,最常見的也就兩種,一種是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...