ホームページ  >  記事  >  バックエンド開発  >  PHP 英語文字列インターセプト コード (単語の整合性を確保するため)

PHP 英語文字列インターセプト コード (単語の整合性を確保するため)

WBOY
WBOYオリジナル
2016-07-25 08:53:041143ブラウズ
  1. /**
  2. * 完全な単語インターセプト
  3. * bbs.it-home.org によって編集および整理
  4. * @param $str
  5. * @param $start
  6. * @param $length
  7. *
  8. * @return string
  9. */
  10. public static function usubstr($str, $start, $length = null)
  11. {
  12. // 最初に通常どおりインターセプトします。
  13. $res = substr ($str, $start, $length);
  14. $strlen = strlen($str);
  15. /* 次に、最初と最後の 6 バイトが完全である (不完全ではない) かどうかを判断します */
  16. // パラメーター start が正の数
  17. if ($start >= 0) {
  18. //約 6 バイト前を切り詰めます
  19. $next_start = $start + $length; //初期位置
  20. $next_len = $next_start + 6 <= $strlen ? 6: $strlen - $next_start;
  21. $next_segm = substr($str, $next_start, $next_len);
  22. // 最初のバイトが完全な文字の最初のバイトではない場合、約 6 バイトをインターセプトします
  23. $prev_start = $start - 6 > 0 ? $start - 6 : 0;
  24. $prev_segm = substr($str, $prev_start, $start - $prev_start);
  25. } // start は負の数
  26. else {
  27. // カット約6バイト前へ
  28. $next_start = $strlen + $start + $length; // 初期位置
  29. $next_len = $next_start + 6 <= $strlen ? 6 : $strlen - $next_start;
  30. $next_segm = substr($ str, $next_start, $next_len);
  31. // 最初のバイトが完全な文字の最初のバイトではない場合、約 6 バイト後をインターセプトします。
  32. $start = $strlen + $start
  33. $prev_start = $start; - 6 > 0 ? $start - 6 : 0;
  34. $prev_segm = substr($str, $prev_start, $start - $prev_start);
  35. }
  36. // 最初の 6 バイトが utf8 ルールに一致するかどうかを判定します
  37. if (preg_match ('@^([x80-xBF]{0,5})[xC0-xFD]?@', $next_segm, $bytes)) {
  38. if (!empty($bytes[1] )) {
  39. $bytes = $bytes[1];
  40. $res .= $bytes;
  41. }
  42. }
  43. // 最後の 6 バイトが utf8 ルールに準拠しているかどうかを判断します
  44. $ord0 = ord($res[0]); if (128 < ;= $ord0 && 191 >= $ord0) {
  45. // 後ろからインターセプトして res の前に追加します
  46. if (preg_match('@[xC0-xFD][x80-xBF]{ 0,5} $@', $prev_segm, $bytes)) {
  47. if (!empty($bytes[0])) {
  48. $bytes = $bytes[0];
  49. $res = $bytes
  50. }
  51. }
  52. }
  53. if (strlen($res) < $strlen) {
  54. $res = $res . '...';
  55. }
  56. return $res;
  57. }
コードをコピー

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。