解决PHP截取中文字符串问题

巴扎黑
Freigeben: 2016-11-11 13:37:34
Original
1325 Leute haben es durchsucht

PHP截取字符串如果是英文那很好办,直接用substr就行了,一般不会出现乱码.中文就有点麻烦了.
下面给出两种解决办法:
(一)直接使用Multi-Byte函数库的mb_substr();函数就行了,实例代码如下 

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

这种方法简单,快速,安全,漂亮,诱惑...反正什么好词都可以形容它,但是,可惜我的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
Nach dem Login kopieren


Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!