ホームページ  >  記事  >  バックエンド開発  >  文字列セグメンテーション utf-8 (中国語、日本語、韓国語などをサポート、効率的)

文字列セグメンテーション utf-8 (中国語、日本語、韓国語などをサポート、効率的)

WBOY
WBOYオリジナル
2016-07-25 09:08:021330ブラウズ
mb_substr と mb_strlen は非効率すぎるため、このコードが使用されます。

オリジナルではなく、主な原則は UTF-8 のエンコード特性に基づいています
0xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
を使用して文字境界を取得し、それによって単語が占めるバイト数を決定し、それを配列に処理します。


この関数は、mb_substr よりも 10 倍効率的です。このタイプの開発過程で、この関数の効率を比較しました。 2 つ詳細に説明すると、この関数が明らかに優れています。
  1. function str_split_utf8($str) {
  2. // 文字列の各文字を配列に配置します
  3. $split = 1;
  4. $array = strlen($str);
  5. for ( $ i = 0; $i < $len;
  6. $value = ord($str[$i]){
  7. if($value >= 0xC0 && $value < ;= 0xDF)
  8. $split = 2;
  9. elseif($value >= 0xE0 && $value <= 0xEF)
  10. elseif($value >= 0xF0 && $value <= 0xF7)
  11. $split = 4;
  12. elseif($value >= 0xF8 && $value $split = 5;
  13. elseif($value >= 0xFC)
  14. } else {
  15. $split = 1;
  16. }
  17. $key = '';
  18. for ( $j = 0; $j < $split; ++$j, ++$i ) {
  19. $key .= $str[$ i];
  20. }
  21. $array[] = $key;
  22. }
  23. return $array
  24. }
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。