专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »PHP教程 » smarty插件:Smarty插件之中英文混排智能截取 truncate »正文

smarty插件:Smarty插件之中英文混排智能截取 truncate

来源: 发布时间:星期三, 2008年9月10日 浏览:63次 评论:0
注意:具体用法可参考smarty手册 Extending Smarty With Plugins [以插件扩展Smarty] 部分


如:{{assign var=fuyongjie value="我是中国人 chinese people" }}
{{$fuyongjie|truncate_utf8_string:6:""}}


文件名:modifier.smart_truncate_gb2312_string.php

<?php
function smarty_modifier_smart_truncate_gb2312_string($string, $length, $etc = '..')
{
$result = '';

$string = html_entity_decode(trim(strip_tags($string)), ENT_QUOTES, 'gb2312');

for($i = 0, $j = 0; $i < strlen($string); $i++)
{
if($j >= $length)
{
for($x = 0, $y = 0; $x < strlen($etc); $x++)
{
if(ord(substr($etc, $x, 1)) > 128)
{
$x++;
$y++;
}
else
{
$y += 0.5;
}
}

$length -= $y;

break;
}

if(ord(substr($string, $i, 1)) > 128)
{
$i++;
$j++;
}
else
{
$j += 0.5;
}
}

for($i = 0; (($i < strlen($string)) && ($length > 0)); $i++)
{
if(ord(substr($string, $i, 1)) > 128)
{
if($length < 1.0)
{
break;
}

$result .= substr($string, $i, 2);
$length -= 1.0;

$i++;
}
else
{
$result .= substr($string, $i, 1);
$length -= 0.5;
}
}

$result = htmlentities($result, ENT_QUOTES, 'gb2312');

if($i < strlen($string))
{
$result .= $etc;
}

return $result;
}
?>

下面看看UTF-8的相关实现,其实大体都是一样的。

文件名:modifier.smart_truncate_utf8_string.php

<?php
function smarty_modifier_smart_truncate_utf8_string($string, $length, $etc = '..')
{
$result = '';

$string = html_entity_decode(trim(strip_tags($string)), ENT_QUOTES, 'utf-8');

for($i = 0, $j = 0; $i < strlen($string); $i++)
{
if($j >= $length)
{
for($x = 0, $y = 0; $x < strlen($etc); $x++)
{
if($number = strpos(str_pad(decbin(ord(substr($string, $i, 1))), 8, '0', STR_PAD_LEFT), '0'))
{
$x += $number - 1;
$y++;
}
else
{
$y += 0.5;
}
}

$length -= $y;

break;
}

if($number = strpos(str_pad(decbin(ord(substr($string, $i, 1))), 8, '0', STR_PAD_LEFT), '0'))
{
$i += $number - 1;
$j++;
}
else
{
$j += 0.5;
}
}

for($i = 0; (($i < strlen($string)) && ($length > 0)); $i++)
{
if($number = strpos(str_pad(decbin(ord(substr($string, $i, 1))), 8, '0', STR_PAD_LEFT), '0'))
{
if($length < 1.0)
{
break;
}

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

$length -= 1.0;

$i += $number - 1;
}
else
{
$result .= substr($string, $i, 1);

$length -= 0.5;
}
}

$result = htmlentities($result, ENT_QUOTES, 'utf-8');

if($i < strlen($string))
{
$result .= $etc;
}

return $result;
}
?>

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: