php 截取中文字符串实现程序

在php中我们截取字符串可以使用自带的函数,但是自带的函数不支持中文截取,如果需要截取中文字符串我们需要现做一些操作,下面我来给各位朋友介绍.

针对GB2312的代码,代码如下:

  1. //$str是要截取的字符串
  2. //$start是要截取的字符的开始位置
  3. //$len是指要截取的字符长度
  4. function sub_str($str, $start, $len) {
  5. $tmpstr = "";
  6. $strlen = $start + $len;
  7. for($i = 0; $i < $strlen; $i++) {
  8. if(ord(substr($str, $i, 1)) > 0xa0) {
  9. $tmpstr .= substr($str, $i, 2);
  10. $i++;
  11. } else
  12. $tmpstr .= substr($str, $i, 1);
  13. }
  14. return $tmpstr."...";
  15. }

针对uft8,代码如下:

  1. <?php
  2. //截取utf8字符串
  3. function utf8substr($str, $from, $len)
  4. {
  5. return preg_replace('#^(?:[x00-x7f]|[xc0-xff][x80-xbf]+){0,'.$from.'}'.
  6. '((?:[x00-x7f]|[xc0-xff][x80-xbf]+){0,'.$len.'}).*#s',
  7. '$1',$str);
  8. }
  9. ?>

上面的方法肯定不实用,因为我希望可以自动识别支持任何编码的字符串截取,后来找到一个还算可以的分享给各位朋友,代码如下:

  1. <?php
  2. /**
  3. * @package BugFree
  4. * @version $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $
  5. *
  6. *
  7. * Return part of a string(Enhance the function substr())
  8. *
  9. * @author Chunsheng Wang <wwccss@263.net>
  10. * @param string $String the string to cut.
  11. * @param int $Length the length of returned string.
  12. * @param booble $Append whether append "...": false|true
  13. * @return string the cutted string.
  14. */
  15. function sysSubStr($String,$Length,$Append = false)
  16. {
  17. if (strlen($String) < = $Length )
  18. {
  19. return $String;
  20. }
  21. else
  22. {
  23. $I = 0;
  24. while ($I < $Length)
  25. {
  26. $StringTMP = substr($String,$I,1);
  27. if ( ord($StringTMP) >=224 )
  28. {
  29. $StringTMP = substr($String,$I,3);
  30. $I = $I + 3;
  31. }
  32. elseif( ord($StringTMP) >=192 )
  33. {
  34. $StringTMP = substr($String,$I,2);
  35. $I = $I + 2;
  36. }
  37. else
  38. {
  39. $I = $I + 1;
  40. }
  41. $StringLast[] = $StringTMP;
  42. }
  43. $StringLast = implode("",$StringLast);
  44. if($Append)
  45. {
  46. $StringLast .= "...";
  47. }
  48. return $StringLast;
  49. }
  50. }
  51. $String = "www.phpfensi.com 走在中国自动化测试的前沿";
  52. $Length = "18";
  53. $Append = false;
  54. echo sysSubStr($String,$Length,$Append);
  55. ?>