【转】字符串截取,支持中文和其他编码

 
/**
	+----------------------------------------------------------
	* 字符串截取,支持中文和其他编码
	+----------------------------------------------------------
	* @static
	* @access public
	+----------------------------------------------------------
	* @param String	$str		需要转换的字符串
	* @param Int	$start		开始位置
	* @param Int	$length		截取长度
	* @param String	$charset	编码格式
	* @param Boole	$suffix		截断显示字符
	* @param Int	$suffix_num	截断字符长度
	+----------------------------------------------------------
	* @return String
	+----------------------------------------------------------
	*/
	function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true, $suffix_num=22)
	{
		//拆分成单个字符
		$re['utf-8']  = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
		preg_match_all($re[$charset], $str, $match);
		//初始计数并分解找中文个数
		$i=1;
		foreach($match[0] AS $key => $values)
		{
			if($key < $suffix_num)
			{
				is_utf8($values)==1 ? $u8_num = $i++:'';//找到中文后加1
			}
			else
			{
				break;//满足条件退出
			}
		}
		//mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符;减去中文个数
		$slice = mb_substr($str, $start, $length - round($u8_num*1.2), $charset);
		if(!empty($suffix) AND $length > $suffix_num) 
		{
			return $slice."...";
		}
		return $slice;
	}
	echo msubstr('母亲节当日 柏芝自台abceefghijkmnopqrstoawsyz', $start=0, $length=20, $charset="utf-8", $suffix=true),'<br />';
	echo msubstr('abceefg母 亲hijkmnopqrstoawsy节当日柏芝自台z', $start=0, $length=20, $charset="utf-8", $suffix=true);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值