Chinaunix首页 | 论坛 | 博客
  • 博客访问: 314210
  • 博文数量: 111
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 707
  • 用 户 组: 普通用户
  • 注册时间: 2013-02-26 11:00
个人简介

小伙向前冲呀,小伙向前冲呀。

文章分类

全部博文(111)

文章存档

2014年(43)

2013年(68)

我的朋友

分类: PHP

2014-01-27 22:01:52

PHP自动判断字符集并转码的实例参考。 

原理: 
因为gb2312/gbk是中文两字节,这两个字节是有取值范围的,而utf-8中汉字是三字节,同样每个字节也有取值范围。而英文不 管在何种编码情况下,都是小于128,只占用一个字节(全角除外)。 

如果是文件形式的编码检查,还可以直接check utf-8的BOM信息。话不多说,直接上函数,这个函数是用来对字符串进行检查和转码的。 

附,的实例代码: 
Java代码 
  1. /** 
  2. * 自动判断字符集并转码 
  3. * edit:  
  4. */  
  5. function safeEncoding($string,$outEncoding ='UTF-8')      
  6. {      
  7.  $encoding = "UTF-8";      
  8.  for($i=0;$i
  9.  {      
  10.   if(ord($string{$i})<128)      
  11.         continue;      
  12.   
  13.   if((ord($string{$i})&224)==224)      
  14.   {      
  15.      //第一个字节判断通过      
  16.        $char = $string{++$i};      
  17.      if((ord($char)&128)==128)      
  18.        {      
  19.              //第二个字节判断通过      
  20.            $char = $string{++$i};      
  21.              if((ord($char)&128)==128)      
  22.            {      
  23.                 $encoding = "UTF-8";      
  24.                 break;      
  25.            }      
  26.          }      
  27.    }      
  28.   
  29.   if((ord($string{$i})&192)==192)      
  30.        {      
  31.            //第一个字节判断通过      
  32.           $char = $string{++$i};      
  33.          if((ord($char)&128)==128)      
  34.            {      
  35.             // 第二个字节判断通过      
  36.                 $encoding = "GB2312";      
  37.     break;      
  38.    }      
  39.       }      
  40.  }      
  41.   
  42.  if(strtoupper($encoding) == strtoupper($outEncoding))      
  43.   return $string;      
  44.  else     
  45.         return iconv($encoding,$outEncoding,$string);      
  46. }  
  47. ?>  

原文地址:
阅读(1384) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~