您的位置:首页 > 编程语言 > PHP开发

php Smarty 使用手册和一些常见问题,使用心得

2007-11-03 15:49 751 查看
http://www.olteaching.com/file/smarty/


//truncate -> 用来截断指定长度字符串


//{$内容|truncate:5:"..."}


//


//还有个经过改良,支持多种编码的..






直接重命名为:modifier.smartTruncate.php 保存到Smarty 的 plugins 目录下


<?php


function smartDetectUTF8($string)


{


static $result = array();




if(! array_key_exists($key = md5($string), $result))


{


$utf8 = "


/^(?:


[ -~] # ASCII


| [Â-ß][€-¿] # non-overlong 2-byte


| à[ -¿][€-¿] # excluding overlongs


| [á-ìîï][€-¿]{2} # straight 3-byte


| í[€-Ÿ][€-¿] # excluding surrogates


| ð[-¿][€-¿]{2} # planes 1-3


| [ñ-ó][€-¿]{3} # planes 4-15


| ô[€-][€-¿]{2} # plane 16


)+$/xs


";




$result[$key] = preg_match(trim($utf8), $string);


}




return $result[$key];


}




function smartStrlen($string)


{


$result = 0;




$number = smartDetectUTF8($string) ? 3 : 2;




for($i = 0; $i < strlen($string); $i += $bytes)


{


$bytes = ord(substr($string, $i, 1)) > 127 ? $number : 1;




$result += $bytes > 1 ? 1.0 : 0.5;


}




return $result;


}




function smartSubstr($string, $start, $length = null)


{


$result = '';




$number = smartDetectUTF8($string) ? 3 : 2;




if($start < 0)


{


$start = max(smartStrlen($string) + $start, 0);


}




for($i = 0; $i < strlen($string); $i += $bytes)


{


if($start <= 0)


{


break;


}




$bytes = ord(substr($string, $i, 1)) > 127 ? $number : 1;




$start -= $bytes > 1 ? 1.0 : 0.5;


}




if(is_null($length))


{


$result = substr($string, $i);


}


else


{


for($j = $i; $j < strlen($string); $j += $bytes)


{


if($length <= 0)


{


break;


}




if(($bytes = ord(substr($string, $j, 1)) > 127 ? $number : 1) > 1)


{


if($length < 1.0)


{


break;


}




$result .= substr($string, $j, $bytes);


$length -= 1.0;


}


else


{


$result .= substr($string, $j, 1);


$length -= 0.5;


}


}


}




return $result;


}




function smarty_modifier_smartTruncate($string, $length = 80, $etc = '...',


$break_words = false, $middle = false)


{


if ($length == 0)


return '';




if (smartStrlen($string) > $length) {


$length -= smartStrlen($etc);


if (!$break_words && !$middle) {


$string = preg_replace('/s+?(S+)?$/', '', smartSubstr($string, 0, $length+1));


}


if(!$middle) {


return smartSubstr($string, 0, $length).$etc;


} else {


return smartSubstr($string, 0, $length/2) . $etc . smartSubstr($string, -$length/2);


}


} else {


return $string;


}


}


?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: