Heim > Backend-Entwicklung > PHP-Tutorial > Lösen Sie das Problem des Abfangens chinesischer Zeichenfolgen mit PHP

Lösen Sie das Problem des Abfangens chinesischer Zeichenfolgen mit PHP

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

Wenn die von PHP abgefangene Zeichenfolge auf Englisch ist, ist es einfach, substr direkt zu verwenden, und im Allgemeinen gibt es keine verstümmelten Zeichen.
Es gibt zwei Lösungen unten:
( 1) Verwenden Sie einfach direkt die Funktion mb_substr(); der Multi-Byte-Funktionsbibliothek. Der Beispielcode lautet wie folgt:

<?php    
echo mb_substr($str, $start, $length, $encoding);   
echo "<br />";   
?>
Nach dem Login kopieren
Diese Methode ist einfach, schnell, sicher und schön , und verlockend. . . Wie auch immer, jedes gute Wort kann verwendet werden, um es zu beschreiben, aber leider unterstützt mein GoDaddy-Host es nicht, also muss ich einen anderen Weg finden

(2) Passen Sie die chinesische String-Interception-Funktion an, was im Grunde darin besteht, eine Funktion zu schreiben, die sie imitiert mb_substr und rufe es direkt auf, der Code, den ich unten gefunden habe, ist eigentlich sehr einfach

<?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