在php中提供了大量字符串操作函数,像计算字符串长度或字符串截取函数,但是他们都只能简单的计算英文字符,不能对中文混合字符串进行操作,下面我来给大家介绍截取字符串长度与计算字符串长度的方法总结。
常用的字符处理函数
代码如下 复制代码
strstr(string,string) = strchr(,) //从前面第一次出现某个字符串的地方截取到最后
strrchr(string,string) //从某个字符串从最后出现的位置截取到结尾
strpos(string,string[,int]) //某个字符串第一次出现的位置
strrpos(string,string) //某个字符串最后一次出现的位置
substr(string,int[,int]) //从指定位置开始截取字符串,可以指定截取的长度。
strlen(string) //获取字符串的长度
假设
$str=这是1个字符串;
这个串中包含了一个半角字符,同样执行:
代码如下 复制代码
if(strlen($str)>10) $str=substr($str,10);
由于原字符串$str的第10、11个字符构成了汉字“符”;
执行串分割后会将该汉字一分为二,这样被截取的串就会发现乱码现象
那我们可以先来计算字符串长度
代码如下 复制代码
10)
{
//如果汉字数量大于10,你的代码
}
?>
补充
php计算字符串长度,包括计算英文、gbk、utf-8多种字符集下php如何计算字符串长度。英文字符串长度
strlen()是php自带的计算英文字符串的函数。
gbk字符串长度
中文字符计算为2个字符,英文字符计算为1个,可以统计中文字符串长度的函数。 function abslength($str){
代码如下 复制代码
$len=strlen($str);
$i=0;
while($i{
if(preg_match(/^[.chr(0xa1).-.chr(0xff).]+$/,$str[$i]))
{
$i+=2;
}
else
{
$i+=1;
}
}
return $i;
}
utf8字符串长度
下面定义的strlen_utf8函数可以统计utf-8字符串的长度,但不同的是,该函数并不考虑字节,这有些类似
javascript 中字符串的length方法,一个字符全部按 1 个长度计算。 = $len) break;
if($chr & 0x80) {
$chr while ($chr & 0x80) {
$i++;
$chr }
}
}
return $count;
}
$str = www.111cn.net-php资讯;
echo strlen_utf8($str);
?>
这样就可以很准确的对你的中英文混合字体进行截取计算了,如例子
代码如下 复制代码
支持gb2312,gbk,utf-8,big5 中文截取方法
/*
* 中文截取,支持gb2312,gbk,utf-8,big5
*
* @param string $str 要截取的字串
* @param int $start 截取起始位置
* @param int $length 截取长度
* @param string $charset utf-8|gb2312|gbk|big5 编码
* @param $suffix 是否加尾缀
*/
public function csubstr($str, $start=0, $length, $charset=utf-8, $suffix=true)
{
if(function_exists(mb_substr))
{
if(mb_strlen($str, $charset)
$slice = mb_substr($str, $start, $length, $charset);
}
else
{
$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])
$slice = join(,array_slice($match[0], $start, $length));
}
if($suffix) return $slice.…;
return $slice;
}