Heim >Backend-Entwicklung >PHP-Tutorial >php英文字符串截取代码(保证单词完整性)

php英文字符串截取代码(保证单词完整性)

WBOY
WBOYOriginal
2016-07-25 08:53:041180Durchsuche
  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 $next_segm = substr($str, $next_start, $next_len);
  21. // 如果第1字节就不是 完整字符的首字节, 再往后截取大约6字节
  22. $prev_start = $start - 6 > 0 ? $start - 6 : 0;
  23. $prev_segm = substr($str, $prev_start, $start - $prev_start);
  24. } // start是负数
  25. else {
  26. // 往前再截取大约6字节
  27. $next_start = $strlen + $start + $length; // 初始位置
  28. $next_len = $next_start + 6 $next_segm = substr($str, $next_start, $next_len);
  29. // 如果第1字节就不是 完整字符的首字节, 再往后截取大约6字节.
  30. $start = $strlen + $start;
  31. $prev_start = $start - 6 > 0 ? $start - 6 : 0;
  32. $prev_segm = substr($str, $prev_start, $start - $prev_start);
  33. }
  34. // 判断前6字节是否符合utf8规则
  35. if (preg_match('@^([x80-xBF]{0,5})[xC0-xFD]?@', $next_segm, $bytes)) {
  36. if (!empty($bytes[1])) {
  37. $bytes = $bytes[1];
  38. $res .= $bytes;
  39. }
  40. }
  41. // 判断后6字节是否符合utf8规则
  42. $ord0 = ord($res[0]);
  43. if (128 = $ord0) {
  44. // 往后截取 , 并加在res的前面.
  45. if (preg_match('@[xC0-xFD][x80-xBF]{0,5}$@', $prev_segm, $bytes)) {
  46. if (!empty($bytes[0])) {
  47. $bytes = $bytes[0];
  48. $res = $bytes . $res;
  49. }
  50. }
  51. }
  52. if (strlen($res) $res = $res . '...';
  53. }
  54. return $res;
  55. }
复制代码


Stellungnahme:
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