08-08-23

Smarty truncate函数改进版(支持中文)

<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/

/**
* Smarty truncate modifier plugin
*
* Type:     modifier<br>
* Name:     truncate<br>
* Purpose:  Truncate a string to a certain length if necessary,
*           optionally splitting in the middle of a word, and
*           appending the $etc string or inserting $etc into the middle.
* @link http://smarty.php.net/manual/en/language.modifier.truncate.php
*          truncate (Smarty online manual)
* @author   Monte Ohrt <monte at ohrt dot com>
* @param string
* @param integer
* @param string
* @param boolean
* @param boolean
* @return string
*/
function smarty_modifier_truncate($string, $length = 80, $etc = ‘…’,
                                  $break_words = false, $middle = false,$code=’utf8′)
{
    if ($length == 0)
        return ”;

    if (mb_strlen($string,$code) > $length) {
        $length -= mb_strlen($etc,$code);
        if (!$break_words && !$middle) {
            $string = preg_replace(‘/s+?(S+)?$/’, ”,mb_substr($string, 0, $length+1,$code));
        }
        if(!$middle) {
           return mb_substr($string, 0, $length,$code).$etc;
         } else {
           return mb_substr($string, 0, $length/2,$code) .$etc. mb_substr($string, -$length/2,$code);
                }
    } else {
        return $string;
    }
}

/* vim: set expandtab: */

?>
阅读全文 »

08-06-13

UTF8编码中汉字截取的两种方法

1.先算再取

/**
* Author : Dummy | Zandy
* Email : lianxiwoo@gmail.com | hotmail.com
* Create : 200512
* Usage : echo join(”, String::subString_UTF8(‘汉字’, 0, 1));
*/
ini_set(‘display_errors’, 1);
error_reporting(E_ALL ^ E_NOTICE);
class String {
function subString_UTF8($str, $start, $lenth)
{
$len = strlen($str);
$r = array();
$n = 0;
$m = 0;
for($i = 0; $i < $len; $i++) {
$x = substr($str, $i, 1);
$a = base_convert(ord($x), 10, 2);
$a = substr(‘00000000′.$a, -8);
if ($n < $start){
if (substr($a, 0, 1) == 0) {
}elseif (substr($a, 0, 3) == 110) {
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$i += 2;
}
$n++;
}else{
if (substr($a, 0, 1) == 0) {
$r[] = substr($str, $i, 1);
}elseif (substr($a, 0, 3) == 110) {
$r[] = substr($str, $i, 2);
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$r[] = substr($str, $i, 3);
$i += 2;
}else{
$r[] = ”;
}
if (++$m >= $lenth){
break;
}
}
}
return $r;
} // End subString_UTF8
}// End String
echo join(”, String::subString_UTF8(‘汉字’, 0, 1));

阅读全文 »