thinkphp中的截取中文字符串函数msubstr()用法

看了很多教程说的是thinkphp可以在模板中直接使用msubstr方法来截取中文字符串,可是零度使用过程中却发现根本无法使用,百度一下知道,原来是因为think文件夹里没有放这个函数,现在贴出来,以便没有的网友直接拿过去用。

问题:使用ThinkPHP字符截取报错“Call to undefined function msubstr()”

解决方案:

把以下代码复制到ThinkPHP/Common/function.php文件中,我说的是3.23版本,其他版本复制到到公用函数文件里就行。

/**
*+----------------------------------------------------------
* 字符串截取,支持中文和其他编码
*+----------------------------------------------------------
* @static
* @access public
*+----------------------------------------------------------
* @param string $str 需要转换的字符串
* @param string $start 开始位置
* @param string $length 截取长度
* @param string $charset 编码格式
* @param string $suffix 截断显示字符
*+----------------------------------------------------------
* @return string
*+----------------------------------------------------------
*/
function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true){
  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."...";
    }else{
        return $slice;
    }
}

总结感觉就是thinkphp不带这个函数需要我们自己在公共函数中增加一个函数才可以使用了。

时间: 2024-10-26 01:30:41

thinkphp中的截取中文字符串函数msubstr()用法的相关文章

THINKPHP截取中文字符串函数实例代码

在项目开发中,我们常常会遇到英文.中文等字符串截取问题,比如说新闻列表页面需要新闻内容简介,这就要用到字符串截取了. 下面就为大家分享一个THINKPHP中已经准备好的字符串截取函数. # 函数解释: msubstr($str, $start=0, $length, $charset="utf-8″, $suffix=true) /* $str:要截取的字符串 $start=0:开始位置,默认从0开始 $length:截取长度 $charset="utf-8″:字符编码,默认UTF-8

php截取中文字符串函数实例

 这篇文章主要介绍了php截取中文字符串函数,实例分析了php针对中文字符串操作的技巧,注意utf-8与gb2312编码的转换问题,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php截取中文字符串函数.分享给大家供大家参考.具体实现方法如下:   代码如下: <?php //中文字符串截取 function substr_zh($string,$sublen,$start=0,$code='UTF-8'){ if($code=='UTF-8'){ $pa = "/[x

php截取中文字符串函数实例_php技巧

本文实例讲述了php截取中文字符串函数.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <?php //中文字符串截取 function substr_zh($string,$sublen,$start=0,$code='UTF-8'){  if($code=='UTF-8'){   $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x8

THINKPHP截取中文字符串函数

THINKPHP中已经准备好的字符串截取函数. ThinkPHP 官方扩展的 msubstr 方法其实挺好的,但有以下几个问题: 1,调用的时候会多次判断,包括2次判断是否自带了 mb_substr 和 iconv_substr 函数: 2,无论是否超出长度,如果有 $suffix=true 都会追加省略号,这个不太合理: 介于以上两点,并且在确保自己的服务器支持 mb_substr 函数.并且都是 utf-8 编码的情况下,我们其实可以自己在 Common/common.php(3.2 版本中

PHP截取中文字符串函数总结

常用的php函数 strstr(string,string)            //从前面第一次出现某个字符串的地方截取到最后 strrchr(string,string)         //从某个字符串从最后出现的位置截取到结尾 strpos(string,string[,int])  //某个字符串第一次出现的位置 strrpos(string,string)      //某个字符串最后一次出现的位置 substr(string,int[,int])    //从指定位置开始截取字符

thinkphp中字符截取函数msubstr()用法分析_php实例

本文实例讲述了thinkphp中字符截取函数msubstr()用法.分享给大家供大家参考,具体如下: ThinkPHP有一个内置字符截取函数msubstr()如下: msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) $str:要截取的字符串 $start=0:开始位置,默认从0开始 $length:截取长度 $charset="utf-8":字符编码,默认UTF-8 $suffix=tr

php中计算中文字符串长度、截取中文字符串的函数代码_php技巧

在PHP中,我们都知道有专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数并非PHP的核心函数,所以,它们常常有可能没有开启.当然,如果是用的自己的服务器,则只要在php.ini中开启即可.如果是用的虚拟主机,而服务器又没有开启这方面的函数的话,那就需要我们自己写出点适合咱国情的函数来了. 以下几个函数用起来颇为顺手的.不过要知道,得在utf-8环境下使用. 复制代码 代码如下: header('Content-type:text/html;cha

php substr()函数截取中文字符串乱码

php截取中文字符串出现乱码,这是最近发现的事情,先前我曾经写过一篇关于自动生成meta信息的文章 ,那篇关于利用php截取文章前多少字作为description方法,但是出现了IE6无法加载CSS的现象,这里 做一个补充.   首先要明确这么一个问题,之所以会出现IE6偶尔无法加载CSS的现象,是因为文件出现了乱码,导致后 面的加载CSS的link无法被IE6正确解析.因此就看到了一个纯HTML页面,没有CSS,赤裸裸! 明确了问题,剩下的问题就好解决了,就是防止乱码,既然万戈所提供的函数出现

cakephp中截取中文字符串?

cakephp教程中截取中文字符串? Text->truncate方法有3个参数: $text:需要截取的字符串 $length:需要截取的长度,默认是截取100个字符 $options:数组参数.ending表示在截取后的字符串结尾加上ending字符串:exact如果是false的话则不会截断word:html如果是true的话则不会截断html tag 下面的代码演示了如何使用tuncate方法: view sourceprint?echo $this->Text->truncat