php对中文字符串的精准截取

  • 八月 19th, 2009

php在操作字符串的问题时间无非两个问题:
1.判断字符串编码是gbk还是unicode。
2.对相应编码采取相应截取方法。
下边3个函数即可实现此两点以达到精确截取中文字符串的目的:

// gbk截取中文字符串
function gbksub($str, $len) {
    
$tmpstr = "";
    
$strlen = $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);
    
}
    
echo $tmpstr;
}
 
// utf-8 截取中文字符
function utfsub($str,$len)
{
    
for($i=0;$i<$len;$i++)
    
{
        
$temp_str=substr($str,0,1);
        
if(ord($temp_str) > 127)
        
{
            
$i++;
            
if($i<$len)
            
{
                
$new_str[]=substr($str,0,3);
                
$str=substr($str,3);
            
}
        
}
        
else
        
{
            
$new_str[]=substr($str,0,1);
            
$str=substr($str,1);
        
}
    
}
    
return join($new_str);
}
//判断字符编码
function is_gb2312($str)
{
    
for($i=0; $i<strlen($str); $i++) {
        
$v = ord( $str[$i] );
        
if( $v > 127) {
            
if( ($v >= 228) && ($v <= 233) )
            
{
                
if( ($i+2) >= (strlen($str) - 1)) return true;
                
$v1 = ord( $str[$i+1] );
                
$v2 = ord( $str[$i+2] );
                
if( ($v1 >= 128) && ($v1 <=191) && ($v2 >=128) && ($v2 <= 191) ) // utf编码
                    
return false;
                
else
                    
return true;
            
}
        
}
    
}
    
return true;
}

to “php对中文字符串的精准截取”

给我回复