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;
}
}
?>
//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;
}
}
?>
相关文章推荐
- 配置使用EF6.0常见的一些问题及解决方案
- Windows使用过程中的一些常见问题的解决方案
- idea使用过程中的一些常见问题,做个笔记
- 章节12 常见问题 - Segger SystemView使用手册(译文)
- 关于eWebEditor常见的问题及其个人使用心得
- MYMONEY使用PHP做站的一些心得与大家共享
- phpmailer发邮件常见的一些问题总结及使用案例
- 关于初次配置或者使用svn的一些常见问题
- Activemq 常见的一些问题 心得
- 使用Session机制一些常见的问题
- 学习PHP过程中的一些常见代码优化问题
- 黑马程序员 集合的使用与一些常见的问题总结
- Vue2.0总结———vue使用过程常见的一些问题
- Android Studio使用心得 - 常见问题
- 使用ProcessOnh绘制流程图的过程中一些常见的问题
- php项目中使用Smarty3,Demo中的index.php显示为空白的问题
- PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
- 使用VS2010创建WebService 和IIS发布及一些常见问题
- ADSL宽带使用过程中常见的一些问题
- vue使用过程常见的一些问题