首页 > 后端开发 > php教程 > php英文字符串截取代码(保证单词完整性)

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

WBOY
发布: 2016-07-25 08:53:04
原创
1179 人浏览过
  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. }
复制代码


来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板