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函数的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did31129