为了前端的美观,我用Smarty内置的truncate函数进行字符长度控制,比如有些文章的标题太长了,并且实际上它没有必要完全显示出来。用truncate是可以截取,比如说是这样:
| 代码如下 | 复制代码 |
| {$articleTitle|truncate:11:"...":true} | |
但是如果标题为中文,那么就很容易出现乱码!这是因为Smarty的truncate截取的是字符(占一个字节),但是如果是中文,例如UTF-8(占3个字节),那么在截取的时候这里的参数11是字节数,如果是中文,则它实际上是截取3个汉字(9个字节),剩下的2字节不能表示一个汉字,那么它就会以乱码的形式显示出来!
从网上找了一个解决办法,还是不错的:
| 代码如下 | 复制代码 |
|
function smarty_modifier_truncate_utf($string, $length = 80, $etc = '...') { |
|
其实原理很简单,就是每次从字符串中取出一个字符(这个包括英文字母、符号、汉字等等),然后将其转为ASCII码,至于为什么要转为ASCII码,因为每个字符对应于唯一的一个ASCII码,而且其分布还是有规律的,比如说任意的一个汉字的ASCII码都大于255。这样我们就可以对字符进行处理了,如果当前字符为英文字母或者是可打印的符号(ASCII值从0~254),那么截取长度+1,如果当前字符为汉字(ASCII值>255),那么截取长度就+3(UTF-8下)。这样循环结束后也就知道了实际需要截取的是多少个字节数了!
忘了说了,将上面的函数写到modifier.truncate_utf.php这个文件中,然后将其放在smarty的plugins目录下,调用的时候:
| 代码如下 | 复制代码 |
|
<{$topic|truncate_utf:11:"..."}> |
|
模拟极限越野
模拟极限越野开着大巴在各种奇葩路况里送乘客。山路弯道多得让人
模拟火车
模拟火车让你当回真正的火车司机,得先学会看信号灯、操作控制杆
可口的披萨美味的披萨
可口的披萨美味的披萨带您体验经营一家披萨店的乐趣。游戏画风温
定制虚拟偶像最新版
定制虚拟偶像最新版是一款超级经典有趣的日本模拟装扮类型的手游
病娇模拟器手机版正版(yandere simulator)
病娇模拟器最新版手游是一款萌妹二次元模拟游戏,玩家在游戏中可