PHP下截取字符串的有效方法(mb_string替代方案)(转载)

以下两个方法的代码比较长,也是在网上搜到的,我把格式整理了一下,直接拷贝就可以用,非常方便,

主函数方法名:smarty_modifier_truncate_utf8和smarty_modifier_truncate_gbk

GBK编码下的截串动作

function gbk_strlen($string)
{
if(extension_loaded('mbstring')) {
   mb_internal_encoding('GBK');
   return mb_strlen($string);
}
else {
   preg_match_all('/[\x81-\xfe]?./', $string, $match);
   return count($match[0]);
}
}

function gbk_substr($string, $start, $length = null) {
if(extension_loaded('mbstring')) {
mb_internal_encoding('GBK');

if(is_null($length)) {
   return mb_substr($string, $start);
}
else {
   return mb_substr($string, $start, $length);
}
}
else {
preg_match_all('/[\x81-\xfe]?./', $string, $match);

if(is_null($length)) {
return implode('', array_slice($match[0], $start));
}
else {
return implode('', array_slice($match[0], $start, $length));
}
}
}

function smarty_modifier_truncate_gbk($string, $length = 80, $etc = '...', $break_words = false, $middle = false) {
if ($length == 0) return '';
if (gbk_strlen($string) > $length) {
$length -= gbk_strlen($etc);
if (!$break_words && !$middle) {
   $string = preg_replace('/\s+?(\S+)?$/', '', gbk_substr($string, 0, $length+1));
}
if(!$middle) {
   return gbk_substr($string, 0, $length).$etc;
} else {
   return gbk_substr($string, 0, $length/2) . $etc . gbk_substr($string, -$length/2);
}
} else {
return $string;
}
}

//UTF-8编码下的方法

function smarty_modifier_truncate_utf8($string, $length, $etc = '...') {
$result = '';
$string = html_entity_decode(trim(strip_tags($string)), ENT_QUOTES, 'UTF-8');
$strlen = strlen($string);
for($i = 0; (($i < $strlen) && ($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 = htmlspecialchars($result, ENT_QUOTES, 'UTF-8');
if($i < $strlen) {
$result .= $etc;
}
return $result;
}PHP下截取字符串的有效方法(mb_string替代方案)

转自:http://hi.baidu.com/wader2006/blog/item/298bce1b2b80a9fcae513365.html

转载于:https://www.cnblogs.com/johnwonder/archive/2011/04/08/2009489.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值