PHP中可以避免乱码的截取汉字

 

对字符的接取可以用substr()  之后看了一下文章可以用mb的扩展库mb_substr() 但如果中E数字混排的时候

可能会出现乱码 网上google 下 找到这个 收藏了

<?
/*
   * 可以避免乱码的截取汉字
   * 参数 $str 为字符串,$start 为开始字符,$len 结束字符
   * 返回截取后的字符
   
*/
function  msubstr( $str ,   $start ,   $len ) {
   
$tmpstr   =   "" ;
   
$strlen   =   $start   +   $len ;
   
for ( $i   =   0 $i   <   $strlen $i ++ ) {
    
if ( ord ( substr ( $str ,   $i ,   1 ))  >   0xa0 ) {
     
$tmpstr   .=   substr ( $str ,   $i ,   2 );
     
$i ++ ;
    } 
else
     
$tmpstr   .=   substr ( $str ,   $i ,   1 );
   }
   
return   $tmpstr ;
}
?>



<? php
/*
#$start为起始位置,默认为0
#$len为截取长度,如遇半个汉字,则自动降低长度而不是取整个汉字,保证了不会超过规定的长度
*/
function  substr_cn( $str , $len , $start = 0 )
{
$strlen = strlen ( $str );
for ( $i = 0 ; $i < $strlen ; $i ++ )
{
   
if ( $i >= $start && $i < ( $start + $len ))
   {
    
if ( ord ( substr ( $str , $i , 1 )) > 0xa1 )
    {
     
$tmpstr .= substr ( $str , $i , 2 );
     
$i ++ ;
    }
    
else
     
$tmpstr .= substr ( $str , $i , 1 );
   }

}
if ( strlen ( $tmpstr ) > $len )
{
   
$len -- ;
   
return  substr_cn( $str , $len , $start );
}
return   $tmpstr ;
}

// -------------------------------------------------
//示例

echo  substr_cn( " 123as中国PHP联盟 " , 9 , 1 );
echo   " <br> " ;
echo  substr_cn( " 123as中国PHP联盟 " , 10 );

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值