PHP字符截取函数,兼容各类gbk,utf-8编码

在PHP中字符截取函数substr只能截取全英文才不会出现乱码如果里面有中文肯定是无法截取的,下面小编来给大家介绍两个兼容各类gbk,utf-8编码字符串截取函数,实例代码如下:

  1. function CsubStrPro($str, $start, $length, $charset = "utf-8", $suffix = false)
  2. {
  3. if (function_exists ( "mb_substr" ))
  4. return mb_substr ( $str, $start, $length, $charset );
  5. $re ['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
  6. $re ['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
  7. $re ['gbk'] = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
  8. $re ['big5'] = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
  9. preg_match_all ( $re [$charset], $str, $match );
  10. $slice = join ( "", array_slice ( $match [0], $start, $length ) );
  11. if ($suffix)
  12. return $slice . "…";
  13. return $slice;
  14. }

实例代码二:

  1. function subString_UTF8($str, $start, $lenth)
  2. {
  3. $len = strlen($str);
  4. $r = array();
  5. $n = 0;
  6. $m = 0;
  7. for($i = 0; $i < $len; $i++) {
  8. $x = substr($str, $i, 1);
  9. $a = base_convert(ord($x), 10, 2);
  10. $a = substr('00000000'.$a, -8);
  11. if ($n < $start){
  12. if (substr($a, 0, 1) == 0) {
  13. }elseif (substr($a, 0, 3) == 110) {
  14. $i += 1;
  15. }elseif (substr($a, 0, 4) == 1110) {
  16. $i += 2;
  17. }
  18. $n++;
  19. }else{
  20. if (substr($a, 0, 1) == 0) {
  21. $r[ ] = substr($str, $i, 1);
  22. }elseif (substr($a, 0, 3) == 110) {
  23. $r[ ] = substr($str, $i, 2);
  24. $i += 1;
  25. }elseif (substr($a, 0, 4) == 1110) {
  26. $r[ ] = substr($str, $i, 3);
  27. $i += 2;
  28. }else{
  29. $r[ ] = '';
  30. }
  31. if (++$m >= $lenth){
  32. break;
  33. }
  34. }
  35. }
  36. return $r;
  37. } // End subString_UTF8;
  38. // End String

由于此函数返回的是一个数组,因此要配合join函数来显示字符串:join('',subString_UTF8($str, $start, $lenth));,在页面显示的时候还可以在此语句后面连一个"..."