添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在做PHP开发的时候,由于我国的语言环境问题,所以我们常常需要对中文进行处理。在PHP中,我们都知道有专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数并非PHP的核心函数,所以,它们常常有可能没有开启。当然,如果是用的自己的服务器,则只要在php.ini中开启即可。如果是用的虚拟主机,而服务器又没有开启这方面的函数的话,那就需要我们自己写出点适合咱国情的函数来了。

以下几个函数用起来颇为顺手的。不过要知道,得在utf-8环境下使用。

* 可以统计中文字符串长度的函数
* @param $str 要计算长度的字符串
* @param $type 计算长度类型,0(默认)表示一个中文算一个字符,1表示一个中文算两个字符
function abslength( $str )
if ( empty ( $str )){
return 0;
if (function_exists( 'mb_strlen' )){
return mb_strlen( $str , 'utf-8' );
else {
preg_match_all( "/./u" , $str , $ar );
return count ( $ar [0]);
$str = '我们都是中国人啊,ye!' ;
$len = abslength( $str );
var_dump( $len ); //return 12
$len = abslength( $str , '1' );
echo '<br />' . $len ; //return 22
utf-8编码下截取中文字符串,参数可以参照substr函数
@param $str 要进行截取的字符串
@param $start 要进行截取的开始位置,负数为反向截取
@param $end 要进行截取的长度
function utf8_substr( $str , $start =0) {
if ( empty ( $str )){
return false;
if (function_exists( 'mb_substr' )){
if (func_num_args() >= 3) {
$end = func_get_arg(2);
return mb_substr( $str , $start , $end , 'utf-8' );
else {
mb_internal_encoding( "UTF-8" );
return mb_substr( $str , $start );
else {
$null = "" ;
preg_match_all( "/./u" , $str , $ar );
if (func_num_args() >= 3) {
$end = func_get_arg(2);
return join( $null , array_slice ( $ar [0], $start , $end ));
else {
return join( $null , array_slice ( $ar [0], $start ));
$str2 = 'wo要截取zhongwen' ;
echo '<br />' ;
echo utf8_substr( $str2 ,0,-4); //return wo要截取zhon
public function csubstr( $str , $start =0, $length , $charset = "utf-8" , $suffix =true)
if (function_exists( "mb_substr" ))
if (mb_strlen( $str , $charset ) <= $length ) return $str ;
$slice = mb_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 );
if ( count ( $match [0]) <= $length ) return $str ;
$slice = join( "" , array_slice ( $match [0], $start , $length ));
if ( $suffix ) return $slice . "…" ;
return $slice ;

本文转自: github

作者: wish123 出处: http://www.cnblogs.com/wish123/archive/2011/08/09/2132150.html 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。