Heim > Artikel > Backend-Entwicklung > Lösen Sie das Problem des Abfangens chinesischer Zeichenfolgen mit PHP
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 />"; ?>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