zoukankan      html  css  js  c++  java
  • smarty截取中文乱码问题解决办法转载

    网站的页面在展现时,为了美观,经常需要对一些标题的长度进行控制。在整个程序中,到处都是那忙碌的字符串截取函数,而且还可能出现中文乱码。用mb_substr()可以比较好的截取中文,但是它把中文和英文都按一个字符处理,截取的效果感觉不是太好。

    如果你是用Smarty做表现层的话,可以用smarty的变量调节器truncate方法来控制字符串的长度,当然利用Smarty自己的truncate截取中文时,会出现乱码。我们可以改写它的truncate调节器,让它来帮我们截取字符串,达到一劳永逸的效果。

    找到你的Smarty安装目录,打开plugins/modifier.truncate.php文件。你可以用下面的函数替换掉smarty自己的函数。

    function smarty_modifier_truncate($string, $length = 80, $etc = '...',
                                        $break_words = false, $middle = false)
    {
         if ($length == 0)
              return '';

          if (strlen($string) > $length) {
              $length -= min($length, strlen($etc));
              for($i = 0; $i < $length ; $i++) {
         $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
        }
        return $strcut.$etc;  
            
          } else {
              return $string;
          }
    }

    参数$length:为截取字符串的最大长度,默认为80字符,一个中文按2个字符计算;$etc:截取字符串时,自动附加在后面的符号。默认为(...);$break_words 本指为是否可以打断一个单词,在中文环境下,作用不大,在改写的方法中,后面两个参数不起什么作用。

    最后说下使用,{$title|truncate:30:"..."} ,很简单不是?当然这30个字符的长度还包括(...),如果你不喜欢,可以自己修改上面代码中的一行。

  • 相关阅读:
    [SDOI2015] 序列统计
    [BZOJ3514] Codechef MARCH14 GERALD07加强版
    [CF1082E] Increasing Frequency
    [CF1093G] Multidimensional Queries
    [HNOI2013] 切糕
    [HEOI2017] 寿司餐厅 + 最大权闭合子图的总结
    [BZOJ3771] Triple
    [HEOI2016] 字符串
    [总结] 后缀数组学习笔记
    [Luogu 3613] 睡觉困难综合征
  • 原文地址:https://www.cnblogs.com/zhangqifeng/p/1732996.html
Copyright © 2011-2022 走看看