zl程序教程

您现在的位置是:首页 >  后端

当前栏目

关于PHP自动判断字符集并转码的详解

PHP自动 详解 关于 判断 字符集 转码
2023-06-13 09:15:02 时间
原理很简单,因为gb2312/gbk是中文两字节,这两个字节是有取值范围的,而utf-8中汉字是三字节,同样每个字节也有取值范围。而英文不管在何种编码情况下,都是小于128,只占用一个字节(全角除外)。
如果是文件形式的编码检查,还可以直接checkutf-8的BOM信息。话不多说,直接上函数,这个函数是用来对字符串进行检查和转码的。
复制代码代码如下:

<?php
functionsafeEncoding($string,$outEncoding="UTF-8")   
{   
 $encoding="UTF-8";   
 for($i=0;$i<strlen($string);$i++)   
 {   
  if(ord($string{$i})<128)   
       continue;   

  if((ord($string{$i})&224)==224)   
  {   
    //第一个字节判断通过   
      $char=$string{++$i};   
    if((ord($char)&128)==128)   
      {   
            //第二个字节判断通过   
          $char=$string{++$i};   
            if((ord($char)&128)==128)   
          {   
               $encoding="UTF-8";   
               break;   
          }   
        }   
   }   

  if((ord($string{$i})&192)==192)   
      {   
          //第一个字节判断通过   
         $char=$string{++$i};   
        if((ord($char)&128)==128)   
          {   
           //第二个字节判断通过   
               $encoding="GB2312";   
    break;   
   }   
     }   
 }   

 if(strtoupper($encoding)==strtoupper($outEncoding))   
  return$string;   
 else  
       returniconv($encoding,$outEncoding,$string);   
}
?>