zoukankan      html  css  js  c++  java
  • 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个汉字了!

     
  • 相关阅读:
    AngularJS---核心特性
    前后端分离原理
    吴军 见识 读后感
    CSS 颜色名称和CSS 颜色十六进制值
    springmvc+jsp引用本地图片文件
    Eclipse 构建Maven项目--普通web项目 复制另外一个项目的配置文件导致的问题
    html input type=date 赋值问题 必须yyyy-mm-dd格式
    解决eclipse中运行web项目时弹出的"Port 8080 required by Tomcat 9.0 Server at localhost is already in use...
    解决 Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile)
    SpringMVC HelloWorld实例开发及部署
  • 原文地址:https://www.cnblogs.com/c-961900940/p/4607580.html
Copyright © 2011-2022 走看看