php smarty函数扩展

作者:袖梨 2023-09-28

扩展函数放到 */Smarty/libs/plugins目录下,文件命名格式 modifier.xxxx.php,函数名格式function smarty_modifier_xxxx

中文截取 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;">&nbsp;1';

$ubbs['td2'][0] = '/[td([^(]|[)]+)](.*?)[/td]/s';

$ubbs['td2'][1] = '<td style="border:#0099FF 1px dotted; border-left-width:0px; border-bottom-width:0px;">&nbsp;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);

}

相关文章

精彩推荐