• thinkphp模板中截取中文字符串的方法分享


     前段用thinkphp写了一个系统,感觉thinkphp学起来比较容易,开发起来了比较顺手,其中一个关键的因素就是它的模版引擎相当强大,使用方法跟smarty类似,在模版中还可以用php代码,有模版包含、继承的等很多好的功能……

          但是我发现thinkphp在模版函数中,没有中文字符串的截取函数,有个substr可以截取,但是不是基于中文的,当使用utf8编码的时候,由于3个字符代表一个中文,如果想截取的内容混杂中文/数字/英文字符串的时候就会出问题,最后一个字符很有可能混乱,这个问题很头大。于是我到处寻找解决问题的方法,果然有很多大虾给出解决的方法,现在给大家推荐一种我觉得很好用的方法。不过对这个方法我还是有些顾忌,原因是这个方法修改到thinkphp的库文件,这种做法在框架开发中是很不推荐的。说明这点也希望大家先考虑这种方法是否可取,当然如果有什么更好的方法希望高手不吝赐教。

          好了,废话不说了,以下是这个方法的使用方法:

          打开thinkphp库文件:ThinkPHP/Common/common.php文件,在文件的末尾加入以下函数:

    /**
     * 截取中文字符串
     */
    function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=false){
        if(function_exists("mb_substr")){
            if($suffix)
                return mb_substr($str, $start, $length, $charset)."...";
            else
                return mb_substr($str, $start, $length, $charset);
        }elseif(function_exists('iconv_substr')) {
         if($suffix)
                return iconv_substr($str,$start,$length,$charset)."...";
            else
                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));
        if($suffix) return $slice."…";
        return $slice;
    }

          就是这么简单,然后在模版中你就可以使用这个函数了,实例:

          {$title|msubstr=0,21}

          强调一点是,这里的21代表21个中文汉字,而不是sbustr中的21代表7个汉字了!

     
  • 相关阅读:
    Elasticsearch之下载源码
    Elasticsearch之settings和mappings(图文详解)
    Editplus下载、安装并最佳配色方案(强烈推荐)
    在CentOS下安装tomcat并配置环境变量(改默认端口8080为8081)
    Elasticsearch之中文分词器插件es-ik的自定义热更新词库
    Elasticsearch之中文分词器插件es-ik的自定义词库
    Elasticsearch之IKAnalyzer的过滤停止词
    md5增加指定的加密规则,进行加密
    unity中怎样获取全部子物体的组件
    Plus One
  • 原文地址:https://www.cnblogs.com/c-961900940/p/4607580.html
Copyright © 2020-2023  润新知