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

PHP检测字符串是否为UTF8编码的常用方法

发布:smiling 来源: PHP粉丝网  添加日期:2021-04-28 16:38:07 浏览: 评论:0 

这篇文章主要介绍了PHP检测字符串是否为UTF8编码的常用方法,列举了四个实例从不同的角度来实现这一功能,是非常实用的技巧,具有一定的学习借鉴价值,需要的朋友可以参考下

本文实例总结了PHP检测字符串是否为UTF8编码的常用方法。分享给大家供大家参考。具体实现方法如下:

检测字符串编码可以有很多种方法,如利用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);      

准确率基本和mb_detect_encoding()一样,要对一起对,要错一起错。

编码检测不可能100%准确,这个东西已经可以基本满足要求了。

例子3,代码如下:

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

例子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 

希望本文所述对大家的PHP程序设计有所帮助。

Tags: PHP检测字符串

分享到: