当前位置:首页 > PHP教程 > php应用 > 列表

PHP检测字符串是否为UTF8编码4种方法

发布:smiling 来源: PHP粉丝网  添加日期:2015-04-09 12:56:08 浏览: 评论:0 

检测字符串编码可以有很多种方法,如利用ord获得字符的进制然后进入判断,或利用mb_detect_encoding函数来处理,下面整理了几种方法.

例子1,代码如下:

  1. /** 
  2. * 检测字符串是否为UTF8编码 
  3. * @param string $str 被检测的字符串 
  4. * @return boolean 
  5. */ 
  6. function is_utf8($str){ 
  7. $len = strlen($str); 
  8. for($i = 0; $i < $len$i++){ 
  9. $c = ord($str[$i]); 
  10. if ($c > 128) { 
  11. if (($c > 247)) return false; 
  12. elseif ($c > 239) $bytes = 4; 
  13. elseif ($c > 223) $bytes = 3; 
  14. elseif ($c > 191) $bytes = 2; 
  15. else return false; 
  16. if (($i + $bytes) > $lenreturn false; 
  17. while ($bytes > 1) { 
  18. $i++; 
  19. $b = ord($str[$i]); 
  20. if ($b < 128 || $b > 191) return false; 
  21. $bytes--; 
  22. return true; 

例子2,代码如下:

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

准确率基本和mb_detect_encoding()一样,要对一起对,要错一起错,编码检测不可能100%准确,这个东西已经可以基本满足要求了.

例子3,代码如下:

  1. function mb_is_utf8($string)    
  2. {    
  3.     return mb_detect_encoding($string'UTF-8') === 'UTF-8';//新发现    
  4. }  //开源软件:phpfensi.com 

例子4,代码如下:

  1. // Returns true if $string is valid UTF-8 and false otherwise.    
  2. function is_utf8($word)    
  3. {    
  4. if (preg_match("/^([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}$/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){2,}/",$word) == true)    
  5. {    
  6. return true;    
  7. }    
  8. else    
  9. {    
  10. return false;    
  11. }    
  12. // function is_utf8

Tags: PHP检测字符串 UTF8编码

分享到: