php smarty函数扩展


  本文标签:php,smarty

中文截取 modifier.cn_truncate.php
复制代码 代码如下:

function smarty_modifier_cn_truncate($string, $strlen = 20, $etc = ...,
$keep_first_style = false)
{
$strlen = $strlen*2;
$string = trim($string);
if ( strlen($string) <= $strlen ) {
return $string;
}
$str = strip_tags($string);
$j = 0;
for($i=0;$i<$strlen;$i++) {
if(ord(substr($str,$i,1))>0xa0) $j++;
}
if($j%2!=0) $strlen++;
$rstr=substr($str,0,$strlen);
if (strlen($str)>$strlen ) {$rstr .= $etc;}
if ( $keep_first_style == true && ereg(^<(.*)>$,$string) ) {
if ( strlen($str) <= $strlen ) {
return $string;
}
$start_pos = strpos($string,substr($str,0,4));
$end_pos = strpos($string,substr($str,-4));
$end_pos = $end_pos+4;
$rstr = substr($string,0,$start_pos) . $rstr . substr($string,$end_pos,strlen($string));
}
return $rstr;
}

modifier.ubb.php
复制代码 代码如下:

<?php
function smarty_modifier_ubb($str) {
$ubbs[quote][0] = /\[quote\](.*?)\[\/quote\]/s;
$ubbs[quote][1] = <blockquote>引用:<hr size=1>\1<hr size=1></blockquote>;
$ubbs[b][0] = /\[b\](.*?)\[\/b\]/s;
$ubbs[b][1] = <b>\1</b>;
$ubbs[i][0] = /\[i\](.*?)\[\/i\]/s;
$ubbs[i][1] = <i>\1</i>;
$ubbs[u][0] = /\[u\](.*?)\[\/u\]/s;
$ubbs[u][1] = <u>\1</u>;
$ubbs[li][0] = /\[li\](.*?)\[\/li\]/s;
$ubbs[li][1] = <li>\1</li>;
$ubbs[img][0] = /\[img\](.*?)\[\/img\]/s;
$ubbs[img][1] = <img border="0" src="\1">;
$ubbs[img2][0] = /\[img=([^,]+),([^\]]+)\](.*?)\[\/img\]/s;
$ubbs[img2][1] = <img border="0" width="\1" height="\2" src="\3">;
$ubbs[url][0] = /\[url\](.*?)\[\/url\]/s;
$ubbs[url][1] = <a href="\1" target="_blank">\1</a>;
$ubbs[url2][0] = /\[url=([^\]]+)\](.*?)\[\/url\]/s;
$ubbs[url2][1] = <a href="\1" target="_blank">\2</a>;
$ubbs[email][0] = /\[email=([^\]]+)\](.*?)\[\/email\]/s;
$ubbs[email][1] = <a href="mailto:\2">\2</a>;
$ubbs[qq][0] = /\[qq\]([0-9]{5,10})\[\/qq\]/s;
$ubbs[qq][1] = <a target="new" href="tencent://message/?uin=\1&Site=www.52515.net&Menu=yes"><img border="0" src="http://wpa.qq.com/pa?p=1:\1:\1" alt="点击这里给我发消息"></a>;
$ubbs[color][0] = /\[color=([^\]]+)\](.*?)\[\/color\]/s;
$ubbs[color][1] = <font color="\1">\2;
$ubbs[font][0] = /\[font=([^\]]+)\](.*?)\[\/font\]/s;
$ubbs[font][1] = <font face="\1">\2;
$ubbs[size][0] = /\[size=([0-9]+)\](.*?)\[\/size\]/s;
$ubbs[size][1] = <font size="\1" style="line-height:\1em;">\2;
$ubbs[sizept][0] = /\[size=([0-9,pt]+)\](.*?)\[\/size\]/s;
$ubbs[sizept][1] = <font style="font-size:\1">\2;
$ubbs[align][0] = /\[align=([^\]]+)\](.*?)\[\/align\]/s;
$ubbs[align][1] = <div align="\1">\2;
$ubbs[media][0] = /\[media\](.*?)\[\/media\]/s;
$ubbs[media][1] = <embed src="\1"></embed>;
$ubbs[list][0] = /\[list\](.*?)\[\/list\]/s;
$ubbs[list][1] = <ul>\1</ul>;
$ubbs[list2][0] = /\[list=([0-9]+)\](.*?)\[\/list\]/s;
$ubbs[list2][1] = <ol>\2</ol>;
$ubbs[indent][0] = /\[indent\](.*?)\[\/indent\]/s;
$ubbs[indent][1] = <div style="text-indent: 20px;">\1;
$ubbs[table][0] = /\[table([=,0-9,%]*)\](.*?)\[\/table\]/s;
$ubbs[table][1] = <table style="border:#0099FF 1px dotted;border-right-width:0px; border-top-width:0px;">\2;
$ubbs[tr][0] = /\[tr\](.*?)\[\/tr\]/s;
$ubbs[tr][1] = <tr>\1;
$ubbs[td][0] = /\[td\](.*?)\[\/td\]/s;
$ubbs[td][1] = <td style="border:#0099FF 1px dotted; border-left-width:0px; border-bottom-width:0px;"> \1;
$ubbs[td2][0] = /\[td([^(\]|\[)]+)\](.*?)\[\/td\]/s;
$ubbs[td2][1] = <td style="border:#0099FF 1px dotted; border-left-width:0px; border-bottom-width:0px;"> \2;
$str = str_replace([*],<li>,$str);
foreach ($ubbs as $ubb){
$str = ubb_replace($ubb[0],$ubb[1],$str);
}
return $str;
}
function ubb_replace($pattern,$replacement,$str){
do {
$str_ret = $str;
$str = preg_replace($pattern,$replacement,$str);
}while($$str);
return $str_ret;
}
?>

编码 modifier.unescape.php
复制代码 代码如下:

function smarty_modifier_unescape($str)
{
$str = rawurldecode($str);
preg_match_all("/(?:%u.{4})|[^%]+/",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v) {
if(substr($v,0,2) == "%u" && strlen($v) == 6)
$ar[$k] = iconv("UCS-2","GB2312",@pack("H4",substr($v,-4)));
}
return join("",$ar);
}