A-A+
thinkphp截取中文字符串乱码的解决方法
在thinkphp中,如果直接使用截取函数截取字符串的话是会产生乱码的,如果直接使用 mb_substr 或者 iconv_substr,前者会进行多次函数的判断且服务器一定要支持 mb_substr 函数,后者则会追加省略号,这显然有点不太合理,不过好在我们可以在 thinkphp 中自定义函数进行调用,当然也是需要配置 php 原生函数的。
首先需要打开 Common/common.php 文件,这个文件不用太多说了吧,函数的集合方件,在这里面我们可以添加一个 subtext 的函数,代码如下所示:
- function subtext($text, $length)
- {
- if(mb_strlen($text, 'utf8') > $length)
- return mb_substr($text, 0, $length, 'utf8').'...';
- return $text;
- }
ok,函数定义好之后,就可以直接在模板里面进行直接调用了,调用的方法也很简单,只要 {$vo.title|subtext=10} 就OK了,如果没有超出长度的话,则不会追加省略号,在定义函数的时候,已经把所有的编码统一定性为 utf8 格式,所以也就解决了中文乱码的情况。如果是英文字符的话,我们可以设长一些,如果是中文的话,则可以设段一些,这个是根据数量来走的。
好了,上面是自定义的函数,这里我们就来解释一下官方的 msubstr 函数。
- msubstr($str, $start=0, $length, $charset=”utf-8″, $suffix=true)
- /*
- $str:要截取的字符串
- $start=0:开始位置,默认从0开始
- $length:截取长度www.xiariboke.net
- $charset=”utf-8″:字符编码,默认UTF-8
- $suffix=true:是否在截取后的字符后面显示省略号,默认true显示,false为不显示
- */
也是一个比较常用的函数,模板的使用,直接可以 {$vo.title|msubstr=0,5,'utf-8',false} 就行了。
好了,这两个函数都是可以使用的,在thinkphp中产生乱码的原因多半都是因为编码格式不正确所造成的,我们只需要统一编码基本上就可以了。