判断字符串编码思路

1、方法1

PHP Code
  1. function mb_is_utf8($string)   
  2. {   
  3.     return mb_detect_encoding($string'UTF-8') === 'UTF-8';//新发现   
  4. }  


2、方法2

PHP Code
  1. function preg_is_utf8($string)   
  2. {   
  3.     return preg_match('/^.*$/u'$string) > 0;//preg_match('/^./u', $string)   
  4. }  


3、方法3

PHP Code
  1. function is_utf8_1($str)   
  2. {   
  3.     $c=0; $b=0;   
  4.     $bits=0;   
  5.     $len=strlen($str);   
  6.     for($i=0; $i<$len$i++){   
  7.         $c=ord($str[$i]);   
  8.         if($c > 128){   
  9.             if(($c >= 254)) return false;   
  10.             elseif($c >= 252) $bits=6;   
  11.             elseif($c >= 248) $bits=5;   
  12.             elseif($c >= 240) $bits=4;   
  13.             elseif($c >= 224) $bits=3;   
  14.             elseif($c >= 192) $bits=2;   
  15.             else return false;   
  16.             if(($i+$bits) > $lenreturn false;   
  17.             while($bits > 1){   
  18.                 $i++;   
  19.                 $b=ord($str[$i]);   
  20.                 if($b < 128 || $b > 191) return false;   
  21.                 $bits--;   
  22.             }   
  23.         }   
  24.     }   
  25.     return true;   
  26. }  


4、方法四

PHP Code
  1. function is_utf8_2($string) {   
  2.   
  3.     // From http://w3.org/International/questions/qa-forms-utf-8.html   
  4.     return preg_match('%^(?:  
  5.           [\x09\x0A\x0D\x20-\x7E]            # ASCII  
  6.         | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte  
  7.         |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs  
  8.         | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte  
  9.         |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates  
  10.         |  \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3  
  11.         | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15  
  12.         |  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16  
  13.     )*$%xs'$string);   
  14.   
  15. // function is_utf8  


5、方法五

PHP Code
  1. function isUTF8($string)   
  2. {   
  3.     return (utf8_encode(utf8_decode($string)) == $string);   
  4. }  
 
 

//判断字符串是什么编码
if ($tag === mb_convert_encoding(mb_convert_encoding($tag, "GB2312", "UTF-8"), "UTF-8", "GB2312")) {

}
else {//如果是gb2312 的就转换为utf8的
$tag = mb_convert_encoding($tag, 'UTF-8', 'GB2312');
}

原文地址:https://www.cnblogs.com/JustSoSo/p/3706504.html