好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php字符串截取,支持中文和其他编码 - php函数

php字符串截取,支持中文和其他编码

本文章总结了在php函数substr的基础上来截取字符串的函数,在碰到中文时出现汉字截取一半出现乱码的解决办法了,下面介绍了支持中文和其他编码截取程序.

php代码如下:

<?php    /**    * 字符串截取,支持中文和其他编码    *    * @static    * @access public    * @param string $str 需要转换的字符串    * @param string $start 开始位置    * @param string $length 截取长度    * @param string $charset 编码格式    * @param string $suffix 截断显示字符    * @return string    */   function  msubstr( $str ,  $start =0,  $length ,  $charset = "utf-8" ,  $suffix =true)  {       if (function_exists( "mb_substr" ))           mb_substr( $str ,  $start ,  $length ,  $charset );       elseif (function_exists( 'iconv_substr' )) {           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 ;  }  ?> 

如果我们直接使用了php substr来截取数据如在英文和汉字混合的情况下会出现如下问题,如果有这样一个字符串:

$str="这是一个字符串"; 

为了截取该串的前10个字符,使用:

if(strlen($str)>10) $str=substr($str,10)."…"; 

那么,echo $str的输出应该是"这是一个字…"

假设: $str="这是1个字符串";这个串中包含了一个半角字符,同样执行:

if(strlen($str)>10) $str=substr($str,10); 

由于原字符串$str的第10、11个字符构成了汉字[符];执行串分割后会将该汉字一分为二,这样被截取的串就会发现乱码现象,使用了上面这代码字符截取代码就可以方便的解决了这种问题了.

今天找到一个比较好的截取中文字符串方法,在此与大家共享,代码如下:

function  msubstr( $str ,  $start ,  $len ) {       $tmpstr  =  "" ;       $strlen  =  $start  +  $len ;       for ( $i  = 0;  $i  <  $strlen ;  $i ++) {           if (ord( substr ( $str ,  $i , 1)) > 0xa0) {               $tmpstr  .=  substr ( $str ,  $i , 2);               $i ++;          }  else                $tmpstr  .=  substr ( $str ,  $i , 1);      }       return   $tmpstr ;  } 

程序二:PHP截取UTF-8字符串,解决半字符问题.

/******************************************************************   * PHP截取UTF-8字符串,解决半字符问题。   * 英文、数字(半角)为1字节(8位),中文(全角)为3字节   * @return 取出的字符串, 当$len小于等于0时, 会返回整个字符串   * @param $str 源字符串   * $len 左边的子串的长度   ****************************************************************/     function  utf_substr( $str , $len )  {  for ( $i =0; $i < $len ; $i ++)  {  $temp_str = substr ( $str ,0,1);  if (ord( $temp_str ) > 127)  {  $i ++;  if ( $i < $len )  {  $new_str []= substr ( $str ,0,3);  $str = substr ( $str ,3);  } //开源代码phpfensi测试数据   }  else   {  $new_str []= substr ( $str ,0,1);  $str = substr ( $str ,1);  }  }  return  join( $new_str );  } 

查看更多关于php字符串截取,支持中文和其他编码 - php函数的详细内容...

  阅读:55次