首頁  >  文章  >  後端開發  >  解決PHP截取中文字串問題

解決PHP截取中文字串問題

巴扎黑
巴扎黑原創
2016-11-11 13:37:341361瀏覽

PHP截取字串如果是英文那很好辦,直接用substr就行了,一般不會出現亂碼.中文就有點麻煩了.
下面給出兩種解決辦法:
(一)直接使用Multi-Byte函數函式庫的mb_substr();函數就行了,實例程式碼如下 

<?php    
echo mb_substr($str, $start, $length, $encoding);   
echo "<br />";   
?>

這種方法簡單,快速,安全,漂亮,誘惑. . .反正什麼好詞都可以形容它,但是,可惜我的GoDaddy主機不支持,所以得另尋出路
(二)自定義截取中文字符串函數,基本上就是仿照mb_substr寫個函數,直接調用罷了,以下為我找到的程式碼,其實很簡單  

<?php    
function  substr_cn($string_input,$start,$length)   
{   
    /* 功能:  
     * 此算法用于截取中文字符串  
     * 函数以单个完整字符为单位进行截取,即一个英文字符和一个中文字符均表示一个单位长度  
     * 参数:  
     * 参数$string为要截取的字符串,  
     * 参数$start为欲截取的起始位置,  
     * 参数$length为要截取的字符个数(一个汉字或英文字符都算一个)  
     * 返回值:  
     * 返回截取结果字符串  
     * */   
    $str_input=$string_input;   
    $len=$length;   
    $return_str="";   
    //定义空字符串   
    for ($i=0;$i<2*$len+2;$i++)   
        $return_str=$return_str." ";   
    $start_index=0;   
    //计算起始字节偏移量   
    for ($i=0;$i<$start;$i++)   
    {   
        if (ord($str_input{$start_index}>=161))          //是汉语        
        {   
            $start_index+=2;   
        }   
        else                                          //是英文   
        {   
            $start_index+=1;   
        }           
    }       
    $chr_index=$start_index;   
    //截取   
    for ($i=0;$i<$len;$i++)   
    {   
        $asc=ord($str_input{$chr_index});   
        if ($asc>=161)   
        {   
            $return_str{$i}=chr($asc);   
            $return_str{$i+1}=chr(ord($str_input{$chr_index+1}));   
            $len+=1; //结束条件加1   
            $i++;    //位置偏移量加1   
            $chr_index+=2;   
            continue;               
        }   
        else    
        {   
            $return_str{$i}=chr($asc);   
            $chr_index+=1;   
        }   
    }       
    return trim($return_str);   
}//en


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn