php smarty truncate UTF8亂碼問(wèn)題解決辦法
估計(jì)不少玩smarty模板的小朋友都遇到過(guò)裁切亂碼問(wèn)題。特別是UTF8編碼的。
以下代碼保存為modifier.truncate2.php 存到smarty libs下的plugin目錄下
然后裁剪的時(shí)候用$v->content|truncate2:100
就搞定了。
如果不好用可能是緩存導(dǎo)致,請(qǐng)速度刪除templates_c下的緩存文件(小編搞的時(shí)候遇到緩存問(wèn)題。)
<?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)文章
使用PHPMailer實(shí)現(xiàn)郵件發(fā)送代碼分享
這篇文章主要介紹了使用PHPMailer實(shí)現(xiàn)郵件發(fā)送的代碼,以及phpmailer下載鏈接,有需要的朋友可以參考下2014-10-10
php 模擬post_驗(yàn)證頁(yè)面的返回狀態(tài)(實(shí)例講解)
php模擬post_驗(yàn)證頁(yè)面的返回狀態(tài)(實(shí)例講解)。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-10-10
Laravel8 使用圖形驗(yàn)證碼做登錄功能的實(shí)現(xiàn)
這篇文章主要介紹了Laravel8 使用圖形驗(yàn)證碼做登錄功能的實(shí)現(xiàn),通過(guò)安裝擴(kuò)展包調(diào)用相關(guān)接口進(jìn)行校驗(yàn)驗(yàn)證碼是否正確,代碼簡(jiǎn)單易懂,需要的朋友可以參考下2021-06-06
Laravel 5框架學(xué)習(xí)之Eloquent (laravel 的ORM)
Laravel 的 Eloquent ORM 提供了漂亮、簡(jiǎn)潔的 ActiveRecord 實(shí)現(xiàn)來(lái)和數(shù)據(jù)庫(kù)的互動(dòng)。 每個(gè)數(shù)據(jù)庫(kù)表會(huì)和一個(gè)對(duì)應(yīng)的「模型」互動(dòng)。在開(kāi)始之前,記得把 config/database.php 里的數(shù)據(jù)庫(kù)連接配置好。2015-04-04
Zend Framework教程之Loader以及PluginLoader用法詳解
這篇文章主要介紹了Zend Framework教程之Loader以及PluginLoader用法,結(jié)合實(shí)例形式詳細(xì)分析了Zend Framework自動(dòng)加載機(jī)制的原理,使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-03-03
php生成驗(yàn)證碼,縮略圖及水印圖的類(lèi)分享
這篇文章主要給大家分享的是php生成驗(yàn)證碼,縮略圖,及水印圖的類(lèi),十分的實(shí)用,有需要的小伙伴可以參考下2016-04-04
CodeIgniter常用知識(shí)點(diǎn)小結(jié)
這篇文章主要介紹了CodeIgniter常用知識(shí)點(diǎn),包括跳轉(zhuǎn)、常量定義、語(yǔ)言設(shè)置及支持get方法傳參等技巧,需要的朋友可以參考下2016-05-05
PHP開(kāi)發(fā)api接口安全驗(yàn)證的實(shí)例講解
下面小編就為大家分享一篇PHP開(kāi)發(fā)api接口安全驗(yàn)證的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03

