php 中英字符串截取,支持utf8 和gbk

今天在遇到了一个中英字符串截取的问题,在gbk里中文里每个字占两字节,如果全是中文的话,用substr()函数就可以实现了,但中英都有的话就麻烦了,在以前收藏的代码里找到了一个不错的函数,很好的实现了截取的功能

 
  
function get_word( $string , $length , $dot = ' .. ' , $charset = ' gbk ' ) {

if ( strlen ( $string ) <= $length ) {
return $string ;
}

$string = str_replace ( array ( '   ' , ' &nbsp; ' , ' &amp; ' , ' &quot; ' , ' &lt; ' , ' &gt; ' ) , array ( '' , '' , ' & ' , ' " ' , ' < ' , ' > ' ) , $string );

$strcut = '' ;
if ( strtolower ( $charset ) == ' utf-8 ' ) {

$n = $tn = $noc = 0 ;
while ( $n < strlen ( $string )) {

$t = ord ( $string [ $n ]);
if ( $t == 9 || $t == 10 || ( 32 <= $t && $t <= 126 )) {
$tn = 1 ; $n ++ ; $noc ++ ;
}
elseif ( 194 <= $t && $t <= 223 ) {
$tn = 2 ; $n += 2 ; $noc += 2 ;
}
elseif ( 224 <= $t && $t < 239 ) {
$tn = 3 ; $n += 3 ; $noc += 2 ;
}
elseif ( 240 <= $t && $t <= 247 ) {
$tn = 4 ; $n += 4 ; $noc += 2 ;
}
elseif ( 248 <= $t && $t <= 251 ) {
$tn = 5 ; $n += 5 ; $noc += 2 ;
}
elseif ( $t == 252 || $t == 253 ) {
$tn = 6 ; $n += 6 ; $noc += 2 ;
}
else {
$n ++ ;
}

if ( $noc >= $length ) {
break ;
}

}
if ( $noc > $length ) {
$n -= $tn ;
}

$strcut = substr ( $string , 0 , $n );

}
else {
for ( $i = 0 ; $i < $length ; $i ++ ) {
$strcut .= ord ( $string [ $i ]) > 127 ? $string [ $i ] . $string [ ++ $i ] : $string [ $i ];
}
}


return $strcut . $dot ;
}

转载于:https://www.cnblogs.com/say0507/archive/2011/03/30/2000103.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值