php smarty truncate UTF8亂碼問題解決辦法
估計不少玩smarty模板的小朋友都遇到過裁切亂碼問題。特別是UTF8編碼的。
以下代碼保存為modifier.truncate2.php 存到smarty libs下的plugin目錄下
然后裁剪的時候用$v->content|truncate2:100
就搞定了。
如果不好用可能是緩存導(dǎo)致,請速度刪除templates_c下的緩存文件(小編搞的時候遇到緩存問題。)
<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* Smarty truncate modifier plugin
*
* Type: modifier<br>
* Name: truncate<br>
* Purpose: Truncate a string to a certain length if necessary,
* optionally splitting in the middle of a word, and
* appending the $etc string or inserting $etc into the middle.
* @link http://smarty.php.net/manual/en/language.modifier.truncate.php
* truncate (Smarty online manual)
* @author Monte Ohrt <monte at ohrt dot com>
* @param string
* @param integer
* @param string
* @param boolean
* @param boolean
* @return string
*/
function smarty_modifier_truncate2( $string,$length = 80,$etc='...',$count_words = true ) {
return $returnstr =substr_utf8($string, 0, $length).$etc;
}
function substr_utf8($str, $start=0, $length=-1, $return_ary=false) {
$len = strlen($str);if ($length == -1) $length = $len;
$r = array();
$n = 0;
$m = 0;
for($i = 0; $i < $len; $i++) {
$x = substr($str, $i, 1);
$a = base_convert(ord($x), 10, 2);
$a = substr('00000000'.$a, -8);
if ($n < $start) {
if (substr($a, 0, 1) == 0) {
}elseif (substr($a, 0, 3) == 110) {
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$i += 2;
}
$n++;
}else {
if (substr($a, 0, 1) == 0) {
$r[] = substr($str, $i, 1);
}elseif (substr($a, 0, 3) == 110) {
$r[] = substr($str, $i, 2);
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$r[] = substr($str, $i, 3);
$i += 2;
}else {
$r[] = '';
}
if (++$m >= $length) {
break;
}
}
}
return $return_ary ? $r : implode("",$r);
}
/* vim: set expandtab: */
?>
samrty的插件體系還是比較智能而且容易修改的。
相關(guān)文章
PHP+swoole實現(xiàn)簡單多人在線聊天群發(fā)
這篇文章主要介紹了PHP+swoole實現(xiàn)簡單多人在線聊天群發(fā) 的相關(guān)資料,需要的朋友可以參考下2016-01-01服務(wù)器上配置PHP運(yùn)行環(huán)境教程
這篇文章主要介紹了如何在服務(wù)器上配置PHP運(yùn)行環(huán)境的方法及相關(guān)配置,十分全面,這里推薦給大家。2015-02-02Thinkphp 框架擴(kuò)展之類庫擴(kuò)展操作詳解
這篇文章主要介紹了Thinkphp 框架擴(kuò)展之類庫擴(kuò)展操作,結(jié)合實例形式分析了Thinkphp 類庫擴(kuò)展的相關(guān)原理、實現(xiàn)方法與操作注意事項,需要的朋友可以參考下2020-04-04php一次性刪除前臺checkbox多選內(nèi)容的方法
如何一次性刪除前臺checkbox多選的內(nèi)容,在本文將為大家介紹下php中時如何實現(xiàn)的,感興趣的你可不要錯過了哈2013-09-09解決thinkPHP 5 nginx 部署時,只跳轉(zhuǎn)首頁的問題
今天小編就為大家分享一篇解決thinkPHP 5 nginx 部署時,只跳轉(zhuǎn)首頁的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10