1、前言
1、01编码:很久很久以前,为了表示二极管的通、分,我们引入的高电平、低电平,之后又引入的1、0编码进行代替
2、ASCII编码:上个世纪60年代,美国佬为了把计算机的“0101010”编码与文字进行对应起来,制定了一套ASCII编码方案。人总是自私的,他只对自己的语言进行编码,26个字母、数字、其他符号,只用了7位二进制数搞定,第一位用0表示,预留着。所以ASCII编码最多127编码
3、“二代”ASCII编码:不单单是美国佬想把计算机语言和英文联系起来,其他国家也想把自己的语言关联起来,如法文、俄文就基于ASCII编码,利用上ASCII第一位(未使用)变成1,来对自己国家的语言进行编码
4、gb2312编码:我们伟大的祖国80年代也开始对汉字进行编码,由于我们的文字较多,即使是基于ASCII将第一位变成1,也不够我们使用,所以就制定了一套gb2312编码,使用2个字节表示。
5、BIG5编码:我国的港澳地区,他们是使用繁体字(gb2312编码最初并没有考虑到繁体字),怎么办了?他们就出了自己的区域编码BIG5
6、中国一统GBK编码:为了统一汉字,迫切的需要设计出一种既能支持简体字又能表示繁体的新编码方案,GBK诞生了!他兼容了绝大部分gb2312编码(gb2312编码的文字用gbk可以读出来,但是不兼容BIG5编码)
7、世界大统unicode编码:各国编码各做各的,总不是意见好事,为了便于交流,国际社会引入了unicode——(uni统一的意思,code编码)把所有国家的文字都进行了编码
8、统一后浪费空间问题:统一是一件好事,但是也是有问题的。英文只要1个字节ASCII编码就可以表示,unicode还需要2个字节或更多,导致unicode表示英文的时候前面有很多无用的000000000000000000
9、解决问题,UTF编码:解决方法是使用utf8编码,它是基于unicode编码上的一种优化,英文使用1个字节,中文使用2、3个(绝大部分是3个,个别有看到2、4个的一般不用)字节。好处:我能屈能伸,我可以变化长度来保存,就不会浪费空间了吧。
2、PHP转码
iconv("gb2312", "utf-8", $string)
3、mb_convert_encoding与iconv
/**
* Convert encoding.
*
* @param string $string
* @param string $fromEncoding
* @param string $toEncoding
* @static
* @access public
* @return string
*/
static public function convertEncoding($string, $fromEncoding, $toEncoding = 'utf-8')
{
$toEncoding = str_replace('utf8', 'utf-8', $toEncoding);
if(function_exists('mb_convert_encoding'))
{
/* Remove like utf-8//TRANSLIT. */
$position = strpos($toEncoding, '//');
if($position !== false) $toEncoding = substr($toEncoding, 0, $position);
/* Check string encoding. */
$encoding = strtolower(mb_detect_encoding($string, array('ASCII','UTF-8','GB2312','GBK','BIG5')));
if($encoding == $toEncoding) return $string;
return mb_convert_encoding($string, $toEncoding, $encoding);
}
elseif(function_exists('iconv'))
{
if($fromEncoding == $toEncoding) return $string;
$convertString = @iconv($fromEncoding, $toEncoding, $string);
/* iconv error then return original. */
if(!$convertString) return $string;
return $convertString;
}
return $string;
}