工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 3467|回复: 1

让smarty完全支持中文,truncate修饰器改造

[复制链接]
发表于 2006-10-30 03:40 | 显示全部楼层 |阅读模式
我们知道,smarty模板的truncate支持单字符和双字符的截断,这对于使用gbk或者big5的数据来说真是一个幸福。
但如果是使用utf-8编码的中文呢,utf-8中文使用到3个byte的空间来存储一个中文,这样子truncate修饰器截断的中文就可能导致“破碎的残块”,出现“?”符号。
为了不影响原来truncate的功能,我增加了truncate_utf8修饰器解决了这个问题。其原理是通过regex对utf-8编码标准的解析达到正确截断的目的。


  1. function smarty_modifier_truncate_utf8($string, $length = 80, $etc = '...',
  2.                                   $break_words = false, $middle = false)
  3. {
  4.     if ($length == 0)
  5.         return '';

  6.     if (strlen($string) > $length) {
  7.                                 $sPatten = '/(?:[\xe0-\xef][\x80-\xbf]?|[\xc0-\xcf])$/' ;
  8.         $length -= strlen($etc);
  9.         if (!$break_words && !$middle) {                                               
  10.                                                 $string = preg_replace( $sPatten, '', substr($string, 0, $length ) );
  11.         }
  12.         if(!$middle) {
  13.             return substr( $string, 0, $length ) . $etc;
  14.         } else {
  15.             return preg_replace( $sPatten, '', substr($string, 0, $length/2 ) ) . $etc . preg_replace( $sPatten, '', substr($string, 0, -$length/2 ) );
  16.         }
  17.     } else {
  18.         return $string;
  19.     }
  20. }
复制代码

评分

1

查看全部评分

发表于 2008-4-11 01:19 | 显示全部楼层
顶上去,近期可能会用到...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-14 12:11

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表