php最精确的字符串长度截取函数

PHP 投稿 9400 0 评论

php 最精确的字符串长度截取函数,说是最精确截取长度,其实我也不敢确定是否是最精确的,具体有多精确看下面的效果就知道了:

先上测试用的字符串:


<?php
header("Content-Type:text/html;charset=utf-8");

echo cn_substr_utf8('我是一个,和哈,哦也,,国家!',12);
echo '<br />',cn_substr_utf8('ai\'2145m a ch3我[是一,个,和哈,哦也,,国家!',12);
echo '<br />',cn_substr_utf8('【我,是一,个,和哈,哦也,,国家!',12);
echo '<br />',cn_substr_utf8('我是一,个,和哈,哦也,,国家!',12);
echo '<br />',cn_substr_utf8('我是,一,个,和哈,哦也,,国家!',12);
echo '<br />',cn_substr_utf8('我,是,一,个,和哈,哦也,,国家!',12);
echo '<br />',cn_substr_utf8('我是asd一,个,和哈,哦也,,国家!',12);
echo '<br />',cn_substr_utf8('【我i\'m[是一,个,和哈,哦也,,国家!',12);
echo '<br />',cn_substr_utf8('【i\'m a ch我[是一,个,和哈,哦也,,国家!',12);
echo '<br />',cn_substr_utf8('【i\'2145m a ch3我[是一,个,和哈,哦也,,国家!',12);

下面是精确截取字符串的效果图:

php最精确的字符串长度截取函数

具体函数代码如下:


//utf-8中文截取,单字节截取模式
function cn_substr_utf8($str,$length,$append='...',$start=0){
	if(strlen($str)<$start+1){
		return '';
	}
	preg_match_all("/./su",$str,$ar);
	$str2='';
	$tstr='';
	//www.feishuai.vip
	for($i=0;isset($ar[0][$i]);$i++){
		if(strlen($tstr)<$start){
			$tstr.=$ar[0][$i];
		}else{
			if(strlen($str2)<$length + strlen($ar[0][$i])){
				$str2.=$ar[0][$i];
			}else{
				break;
			}
		}
	}
	return $str==$str2?$str2:$str2.$append;
}

编程笔记 » php最精确的字符串长度截取函数

赞同 (49) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽