A-A+

thinkphp截取中文字符串乱码的解决方法

2017年03月09日 PHP开源系统 暂无评论 阅读 4 views 次

在thinkphp中,如果直接使用截取函数截取字符串的话是会产生乱码的,如果直接使用 mb_substr 或者 iconv_substr,前者会进行多次函数的判断且服务器一定要支持 mb_substr 函数,后者则会追加省略号,这显然有点不太合理,不过好在我们可以在 thinkphp 中自定义函数进行调用,当然也是需要配置 php 原生函数的。

首先需要打开 Common/common.php 文件,这个文件不用太多说了吧,函数的集合方件,在这里面我们可以添加一个 subtext 的函数,代码如下所示:

  1. function subtext($text$length)  
  2.  {  
  3.     if(mb_strlen($text, 'utf8') > $length)   
  4.     return mb_substr($text, 0, $length, 'utf8').'...';  
  5.     return $text;  
  6.  }  

ok,函数定义好之后,就可以直接在模板里面进行直接调用了,调用的方法也很简单,只要 {$vo.title|subtext=10} 就OK了,如果没有超出长度的话,则不会追加省略号,在定义函数的时候,已经把所有的编码统一定性为 utf8 格式,所以也就解决了中文乱码的情况。如果是英文字符的话,我们可以设长一些,如果是中文的话,则可以设段一些,这个是根据数量来走的。

好了,上面是自定义的函数,这里我们就来解释一下官方的 msubstr 函数。

  1. msubstr($str$start=0, $length$charset=”utf-8″, $suffix=true)  
  2. /* 
  3. $str:要截取的字符串 
  4. $start=0:开始位置,默认从0开始 
  5. $length:截取长度www.xiariboke.com 
  6. $charset=”utf-8″:字符编码,默认UTF-8 
  7. $suffix=true:是否在截取后的字符后面显示省略号,默认true显示,false为不显示 
  8. */  

也是一个比较常用的函数,模板的使用,直接可以 {$vo.title|msubstr=0,5,'utf-8',false} 就行了。

好了,这两个函数都是可以使用的,在thinkphp中产生乱码的原因多半都是因为编码格式不正确所造成的,我们只需要统一编码基本上就可以了。

标签:

给我留言