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   "
" ;
echo  substr_cn( " 123as中国PHP联盟 " , 10 );

?>
 

你可能感兴趣的:(PHP,Article,Php,Functions)