截取指定长度的字符串

/*
 * 函数说明:截取指定长度的字符串
 *         utf-8专用 汉字和大写字母长度算1,其它字符长度算0.5
 *
 * @param  string  $str  原字符串
 * @param  int     $len  截取长度
 * @param  string  $etc  省略字符...
 * @return string        截取后的字符串
 */
if(!function_exists(‘ReStrLen‘))
{
	function ReStrLen($str, $len=10, $etc=‘...‘)
	{
		$restr = ‘‘;
		$i = 0;
		$n = 0.0;

		//字符串的字节数
		$strlen = strlen($str);
		while(($n < $len) and ($i < $strlen))
		{
		   $temp_str = substr($str, $i, 1);

		   //得到字符串中第$i位字符的ASCII码
		   $ascnum = ord($temp_str);

		   //如果ASCII位高与252
		   if($ascnum >= 252)
		   {
				//根据UTF-8编码规范,将6个连续的字符计为单个字符
				$restr = $restr.substr($str, $i, 6);
				//实际Byte计为6
				$i = $i + 6;
				//字串长度计1
				$n++;
		   }
		   elseif($ascnum >= 248)
		   {
				$restr = $restr.substr($str, $i, 5);
				$i = $i + 5;
				$n++;
		   }
		   elseif($ascnum >= 240)
		   {
				$restr = $restr.substr($str, $i, 4);
				$i = $i + 4;
				$n++;
		   }
		   elseif($ascnum >= 224)
		   {
				$restr = $restr.substr($str, $i, 3);
				$i = $i + 3 ;
				$n++;
		   }
		   elseif ($ascnum >= 192)
		   {
				$restr = $restr.substr($str, $i, 2);
				$i = $i + 2;
				$n++;
		   }

		   //如果是大写字母 I除外
		   elseif($ascnum>=65 and $ascnum<=90 and $ascnum!=73)
		   {
				$restr = $restr.substr($str, $i, 1);
				//实际的Byte数仍计1个
				$i = $i + 1;
				//但考虑整体美观,大写字母计成一个高位字符
				$n++;
		   }

		   //%,&,@,m,w 字符按1个字符宽
		   elseif(!(array_search($ascnum, array(37, 38, 64, 109 ,119)) === FALSE))
		   {
				$restr = $restr.substr($str, $i, 1);
				//实际的Byte数仍计1个
				$i = $i + 1;
				//但考虑整体美观,这些字条计成一个高位字符
				$n++;
		   }

		   //其他情况下,包括小写字母和半角标点符号
		   else
		   {
				$restr = $restr.substr($str, $i, 1);
				//实际的Byte数计1个
				$i = $i + 1;
				//其余的小写字母和半角标点等与半个高位字符宽
				$n = $n + 0.5;
		   }
		}

		//超过长度时在尾处加上省略号
		if($i < $strlen)
		{
		   $restr = $restr.$etc;
		}

		return $restr;
	}
}

  

时间: 2024-12-28 18:26:59

截取指定长度的字符串的相关文章

asp.net截取指定长度的字符串内容

1 /// <summary> 2 /// 用于截取指定长度的字符串内容 3 /// </summary> 4 /// <param name="sString">用于截取的字符串</param> 5 /// <param name="nLength">截取字符串的长度</param> 6 /// <returns>返回截取后的字符串</returns> 7 public

从后向前截取指定长度的字符串

/** * @Title: SubStringSubmitted.java <br/> * @Package_name: substringlearning <br/> * @date Mar 27, 2016 <br/> */ import java.io.UnsupportedEncodingException; /** * @Title: SubStringSubmitted <br/> * @date Mar 27, 2016 <br/>

C#截取指定长度中英文字符串方法 (修改)

public static string GetFirstString(string stringToSub, int length) { Regex regex = new Regex("[/u4e00-/u9fa5]+", RegexOptions.Compiled); char[] stringChar = stringToSub.ToCharArray(); StringBuilder sb = new StringBuilder(); int nLength = 0; for

sql中从指定位置截取指定长度字符串

1. 字符串函数应用 --从指定索引截取指定长度的字符串 SELECT substring('abcdefg',2,5) --获取字符串中指定字符的索引(从1开始) select charindex(',','ab,cdefg') --实际应用中的语句 select proId,color,substring(FacePath,0,charindex(',',FacePath)) as FacePath from proselect where id=1000000 2. 日期函数应用 --获取

jQuery实现的截取指定长度字符串代码

jQuery实现的截取指定长度字符串代码:截取字符串是常有的操作,可以说非常的频繁,几乎任何有新闻列表形式的站点都会有此操作,下面就是一段能够实现此功能的代码实例,直接套用就可以了,希望能够大家带来一定帮助.代码如下: <!DOCTYPE html> <html> <head> <meta charset=utf-8 /> <title>批量注册事件处理函数-蚂蚁部落</title> <style type="text

【转载】C# 字符串截取指定长度的中文字符--精点

通常,一个中文会占两个字节的空间.很多语言里,一个中文字符就算是2个字符长度. 但在C#中,string里包含的中文字符只占一个字符长度.这就导致很多时候,使用string.SubString(int startIndex,int length)方法来截取字符会错位. 最近由于工作原因,会截取指定长度的字符来使用.但是在文档里,1个中文是2个长度来计算.刚开始还只是以为文档错误,后来才知道是由于C#的差异造成的. 刚开始,是直接到网上找算法,但是找到的算法,基本思路都是挨个字符判断(根据ASCI

jQuery截取指定长度字符串

例子,截取字符串代码. <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>jQuery截取字符串操作---www.jbxue.com</title> <script type="text/javascript"

截取指定长度字节数后的字符串(Java方法实例,注:同样思路js也适用)

可能之前是习惯了上网查看其他人的资料,当我遇到这样的问题的时候,我第一时间想到的就是上网查个现成的方法直接用:可是查阅网上各大论坛以及其他资料之后,发现大部分人都是照搬其他人的,这种情况很严重,而且个人感觉很不利于个人技术的成长:当然更重要的原因是,我感觉网上的大部分方法都把问题给复杂化了,无论是用js方法截取还是通过封装Java类,都感觉繁琐了些:为此我自己写了个相对来说较为简单的方法,其实很简单的思路和方法就能实现,下面奉上我自己的方法,希望大家多多指正不足之处(支持全角输入的字符和汉字等,

截取指定长度字符串长度代码实例

截取指定长度字符串长度代码实例:字符串的长度在默认状态下往往不能够满足需求,比如新闻列表新闻标题的长度,如果过长往往会引起换行,影响美观度,进而一项用户体验,所以需要根据需要截取字符串长度,下面就分享两端能够实现此功能的代码,希望对大家有所帮助.代码示例如下:一.CSS方式:html代码: <div class="cutText">蚂蚁部落欢迎您,只有奋斗才会有美好的明天!</div> CSS代码: .cutText{ width:150px; height:2