PHP中检测文件是否为UTF-8编码的函数

php中文网
发布: 2016-07-28 08:25:47
原创
1411人浏览过

// 
// 测试文本是否是utf8编码
// 
// 返回值:
//   1 - 有BOM头的内容
//   2 - 纯utf8的内容
//   3 - 较可能是utf8的内容
//   4 - 较不可能是utf8的内容
// 
function utf8_check($text)
{
  $utf8_bom = chr(0xEF).chr(0xBB).chr(0xBF);
  
  // BOM头检查
  if (strstr($text, $utf8_bom) === 0)
    return 1;
  
  $text_len = strlen($text);
  
  // UTF-8是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;
  // 如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。
  // UTF-8最多可用到6个字节。
  //
  // 如表:
  // < 0x80 1字节 0xxxxxxx
  // < 0xE0 2字节 110xxxxx 10xxxxxx
  // < 0xF0 3字节 1110xxxx 10xxxxxx 10xxxxxx
  // < 0xF8 4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
  // < 0xFC 5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
  // < 0xFE 6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
  
  $bad   = 0; // 不符合utf8规范的字符数
  $good  = 0; // 符号utf8规范的字符数
  
  $need_check = 0; // 遇到多字节的utf8字符后,需要检查的连续字节数
  $have_check = 0; // 已经检查过的连续字节数
  
  for ($i = 0; $i < $text_len; $i &#43;&#43;) {
    $c = ord($text[$i]);

    if ($need_check > 0) {
      $c = ord($text[$i]);
      $c = ($c >> 6) << 6;
      
      $have_check &#43;&#43;;
      
      // 10xxxxxx ~ 10111111
      if ($c != 0x80) {
        $i -= $have_check;
        $need_check = 0;
        $have_check = 0;
        $bad &#43;&#43;;
      }
      else if ($need_check == $have_check) {
        $need_check = 0;
        $have_check = 0;
        $good &#43;&#43;;
      }
      
      continue;
    }
    
    if ($c < 0x80)      // 0xxxxxxx
      $good &#43;&#43;;
    else if ($c < 0xE0) // 110xxxxx
      $need_check = 1;
    else if ($c < 0xF0) // 1110xxxx
      $need_check = 2;
    else if ($c < 0xF8) // 11110xxx
      $need_check = 3;
    else if ($c < 0xFC) // 111110xx
      $need_check = 4;
    else if ($c < 0xFE) // 1111110x
      $need_check = 5;
    else
      $bad &#43;&#43;;
  }
  
  if ($bad == 0)
    return 2;
  else if ($good > $bad)
    return 3;
  else
    return 4;
}
登录后复制

以上就介绍了 PHP中检测文件是否为UTF-8编码的函数,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

豆包AI编程
豆包AI编程

智能代码生成与优化,高效提升开发速度与质量!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号