php 截取字符串函数

本文章提供这三款php 截取字符串函数各有各的特点,所有字符串截取函数都支持中文汉字截取,解决了乱码问题,方法二,支持多种编码的截取.

字符串截取函数一,代码如下:

  1. function mystr($str,$str_len) {//剪取一定长度的字符串(字符串,剪取长度)
  2. if (strlen($str)<=$str_len) {
  3. return $str;
  4. }else return mysubstr($str,0,$str_len)."...";
  5. }
  6. function mysubstr($str, $start, $len) {//剪取一定长度的字符串(字符串,剪取长度)
  7. $tmpstr = "";
  8. $strlen = $start + $len;
  9. for($i = 0; $i < $strlen; $i++) {
  10. if(ord(substr($str, $i, 1)) > 0xa0) {
  11. $tmpstr .= substr($str, $i, 2);
  12. $i++;
  13. } else
  14. $tmpstr .= substr($str, $i, 1);
  15. }
  16. return $tmpstr;
  17. }

字符截取函数二,代码如下:

  1. function syssubstr($string,$length,$append = false)
  2. {
  3. if (strlen($string) < = $length )
  4. {
  5. return $string;
  6. }
  7. else
  8. {
  9. $i = 0;
  10. while ($i < $length)
  11. {
  12. $stringtmp = substr($string,$i,1);
  13. if ( ord($stringtmp) >=224 )
  14. {
  15. $stringtmp = substr($string,$i,3);
  16. $i = $i + 3;
  17. }
  18. elseif( ord($stringtmp) >=192 )
  19. {
  20. $stringtmp = substr($string,$i,2);
  21. $i = $i + 2;
  22. }
  23. else
  24. {
  25. $i = $i + 1;
  26. }
  27. $stringlast[] = $stringtmp;
  28. }
  29. $stringlast = implode("",$stringlast);
  30. if($append)
  31. {
  32. $stringlast .= "...";
  33. }
  34. return $stringlast;
  35. }
  36. }
  37. //开源代码phpfensi.com
  38. $string = "";
  39. $length = "18";
  40. $append = false;
  41. echo syssubstr($string,$length,$append);

utf-8:$byte=3 | gb 2312:$byte=2 | big5:$byte=2,代码如下:

  1. function bite_str($string, $start, $len, $byte=3)
  2. {
  3. $str = "";
  4. $count = 1;
  5. $str_len = strlen($string);
  6. for ($i=0; $i<$str_len; $i++) {
  7. if (($count+1-$start)>$len) {
  8. $str .= "...";
  9. break;
  10. } elseif ((ord(substr($string,$i,1)) <= 128) && ($count < $start)) {
  11. $count++;
  12. } elseif ((ord(substr($string,$i,1)) > 128) && ($count < $start)) {
  13. $count = $count+2;
  14. $i = $i+$byte-1;
  15. } elseif ((ord(substr($string,$i,1)) <= 128) && ($count >= $start)) {
  16. $str .= substr($string,$i,1);
  17. $count++;
  18. } elseif ((ord(substr($string,$i,1)) > 128) && ($count >= $start)) {
  19. $str .= substr($string,$i,$byte);
  20. $count = $count+2;
  21. $i = $i+$byte-1;
  22. }
  23. }
  24. return $str;
  25. }
  26. //开源代码phpfensi.com
  27. // test
  28. $str = "1测试测试2测试测试3测试测试4测试测试";
  29. echo $str;
  30. echo "<br>".bite_str($str,0,20,2);//0为开始地址,20为结束地址2为类型上面说到的

方法四,支持中英文字符串截取函数,代码如下:

  1. function ccstrlen($str) #计算中英文混合字符串的长度
  2. {
  3. $cclen=0;
  4. $asclen=strlen($str);
  5. $ind=0;
  6. $hascc=ereg("[xa1-xfe]",$str); #判断是否有汉字
  7. $hasasc=ereg("[x01-xa0]",$str); #判断是否有ascii字符
  8. if($hascc && !$hasasc) #只有汉字的情况
  9. return strlen($str)/2;
  10. if(!$hascc && $hasasc) #只有ascii字符的情况
  11. return strlen($str);
  12. for($ind=0;$ind<$asclen;$ind++)
  13. {
  14. if(ord(substr($str,$ind,1))>0xa0)
  15. {
  16. $cclen++;
  17. $ind++;
  18. }
  19. else
  20. {
  21. $cclen++;
  22. }
  23. }
  24. return $cclen;
  25. }