博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
thinkphp模板中截取中文字符串的方法分享
阅读量:5377 次
发布时间:2019-06-15

本文共 1583 字,大约阅读时间需要 5 分钟。

 前段用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个汉字了!

 

转载于:https://www.cnblogs.com/c-961900940/p/4607580.html

你可能感兴趣的文章
android使用web加载网页的js问题
查看>>
poj 1068 Parencodings
查看>>
docker 数据卷管理
查看>>
如何让一个div的大小,从某一个特定值开始,随内容的增加而自动变化?
查看>>
P1977 出租车拼车(DP)
查看>>
iOS开发--完整项目
查看>>
我的博客园皮肤模板
查看>>
正则表达式
查看>>
java基础:不同进制的表现形式
查看>>
Base64转换为blob对象
查看>>
gulp自动化压缩合并、加版本号解决方案
查看>>
windows下面安装Python和pip教程
查看>>
Java 动态向 JTable 中添加数据
查看>>
平安科技移动开发二队技术周报(第九期)
查看>>
Oracle【二维表管理:约束】
查看>>
2017-2018-1 20155307 《信息安全系统设计基础》第5周学习总结
查看>>
微软职位内部推荐-Principal Dev Manager for Windows Phone Apps
查看>>
jquery改变元素属性值(转)
查看>>
《额尔古纳河右岸》读书笔记
查看>>
C#Virtual和Override的几种组合
查看>>