首页 > 语言 > PHP > 正文

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

2024-09-04 11:48:05
字体:
来源:转载
供稿:网友

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

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

实例代码二:

  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));,在页面显示的时候还可以在此语句后面连一个"..."

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表