zoukankan      html  css  js  c++  java
  • 一个汉字作为一个字符进行字符串长度计算和切割

    通常情况下,PHP中UTF-8编码的汉字占3个字符的长度,GBK编码的汉字占2个字符的长度,但是最近在做项目过程中,遇到客户提出的要求是这样:一个汉字按一个字符来计算,字母数字按正常来算。于是乎就有了以下的函数:

        /**
         +----------------------------------------------------------
         * @Right
         * 将一个汉字当做一个字符,字符串切割
         +----------------------------------------------------------
         * @access protected
         +----------------------------------------------------------
         * @return object
         +----------------------------------------------------------
         */
        protected function my_mb_substr($str, $start=0, $length, $charset="utf-8")
        {
            if(function_exists("mb_substr"))
                return mb_substr($str, $start, $length, $charset);
            elseif(function_exists('iconv_substr')) {
                return iconv_substr($str,$start,$length,$charset);
            }
            $re['utf-8']   = "/[/x01-/x7f]|[/xc2-/xdf][/x80-/xbf]|[/xe0-/xef][/x80-/xbf]{2}|[/xf0-/xff][/x80-/xbf]{3}/";
            $re['gb2312'] = "/[/x01-/x7f]|[/xb0-/xf7][/xa0-/xfe]/";
            $re['gbk']      = "/[/x01-/x7f]|[/x81-/xfe][/x40-/xfe]/";
            $re['big5']      = "/[/x01-/x7f]|[/x81-/xfe]([/x40-/x7e]|/xa1-/xfe])/";
            preg_match_all($re[$charset], $str, $match);
            $slice = join("",array_slice($match[0], $start, $length));
            return $slice;
        }
  • 相关阅读:
    Mysql5.7主主互备安装配置
    一个简单有效的kubernetes部署案例
    kubernetes应用部署原理
    在线电路编程 (ICP)
    N76E003系统时钟
    说说UART(转)
    串行通信中 同步通信和异步通信的区别及使用情况(转)
    串行通讯与并行通讯区别
    定时器2及输入捕获
    N76E003之定时器3
  • 原文地址:https://www.cnblogs.com/delmory/p/2576032.html
Copyright © 2011-2022 走看看