Heim  >  Artikel  >  Backend-Entwicklung  >  php实现中文字串截取无乱码的方法_PHP教程

php实现中文字串截取无乱码的方法_PHP教程

WBOY
WBOYOriginal
2016-07-13 10:48:36818Durchsuche

有不少php初学者截取字符都会使用substr()函数或者mb_substr()函数来截取了,第一个中文肯定乱码了,第二个性能不好,下面我总结了几个自定的中文字串截取无乱码实例。


例1

 代码如下 复制代码

function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)
    {
        if(function_exists("mb_substr"))
            return mb_substr($str, $start, $length, $charset);
        elseif(function_exists('iconv_substr')) {
            return iconv_substr($str,$start,$length,$charset);
        }
        $re['utf-8']   = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
        $re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
        $re['gbk']    = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
        $re['big5']   = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
        preg_match_all($re[$charset], $str, $match);
        $slice = join("",array_slice($match[0], $start, $length));
        if($suffix) return $slice."…";
        return $slice;
    }

例2

 代码如下 复制代码

//$start:指定开始截取字符串的位置;$length指定截取字符的长度
function substr2($string, $start, $length)
{
$len = strlen($string);
if($len > $length)
{
   $str = '';
   $len1 = $start + $length; //截取到原字符串的位置
   for($i=$start; $i    {
    if(ord(substr($string, $i, 2)) > 0xa0) //在ASCII中,0xa0表示汉字的开始
    {
     $str.=substr($string, $i, 2);
     $i++;
    }
    else
    {
     $str.=substr($string, $i, 1);
    }
   }
   return $str.'...';
}
else
{
   return $string;
}
}

?>

再补充个简单的,思路相同(2010-5-31)

 代码如下 复制代码

function chinesesubstr($str, $start, $len){
   $strlen = $start + $len;
   for($i=0; $i     if(ord(substr($str, $i, 1)) > 0xa0){
     $tmpstr .= substr($str, $i, 2);
     $i++;
    }else{
     $tmpstr .= substr($str, $i, 1);
    }
   }
   return $tmpstr;
}
$str = "waiting for you 等wait你back";
echo chinesesubstr($str, 0, 19)
?>

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/632772.htmlTechArticle有不少php初学者截取字符都会使用substr()函数或者mb_substr()函数来截取了,第一个中文肯定乱码了,第二个性能不好,下面我总结了几个自定...
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn