根据中文裁减字符串函数的php代码

原创 2013年12月04日 09:54:52
裁减字符串函数有很多,但是根据中文裁减字符串的却很少,在本文将为大家介绍下使用php是如何实现的,感兴趣的朋友不要错过
 代码如下:

define(CHARSET, 'UTF-8'); // 系统默认编码

/**
* 根据中文裁减字符串
* @param $string - 字符串
* @param $length - 长度
* @param $doc - 缩略后缀
* @return 返回带省略号被裁减好的字符串
*/
function cutstr( $string, $length, $dot = '...' ) {
if ( strlen( $string ) <= $length ) {
return $string;
}
$pre = chr( 1 );
$end = chr( 1 );
$string = str_replace( array( '&', '"', '<', '>' ), array( $pre . '&' . $end, $pre . '"' . $end, $pre . '<' . $end, $pre . '>' . $end ), $string );
$strcut = '';
if ( strtolower( CHARSET ) == 'utf-8' ) {
$n = $tn = $noc = 0;
while ( $n < strlen( $string ) ) {
$t = ord( $string[$n] );
if ( $t == 9 || $t == 10 || (32 <= $t && $t <= 126) ) {
$tn = 1;
$n++;
$noc++;
} elseif ( 194 <= $t && $t <= 223 ) {
$tn = 2;
$n += 2;
$noc += 2;
} elseif ( 224 <= $t && $t <= 239 ) {
$tn = 3;
$n += 3;
$noc += 2;
} elseif ( 240 <= $t && $t <= 247 ) {
$tn = 4;
$n += 4;
$noc += 2;
} elseif ( 248 <= $t && $t <= 251 ) {
$tn = 5;
$n += 5;
$noc += 2;
} elseif ( $t == 252 || $t == 253 ) {
$tn = 6;
$n += 6;
$noc += 2;
} else {
$n++;
}
if ( $noc >= $length ) {
break;
}
}
if ( $noc > $length ) {
$n -= $tn;
}
$strcut = substr( $string, 0, $n );
} else {
for ( $i = 0; $i < $length; $i++ ) {
$strcut .= ord( $string[$i] ) > 127 ? $string[$i] . $string[++$i] : $string[$i];
}

}

//unity3d http://www.unitymanual.com/

$strcut = str_replace( array( $pre . '&' . $end, $pre . '"' . $end, $pre . '<' . $end, $pre . '>' . $end ), array( '&', '"', '<', '>' ), $strcut );

$pos = strrpos( $strcut, chr( 1 ) );
if ( $pos !== false ) {
$strcut = substr( $strcut, 0, $pos );
}
return $strcut . $dot;
}

【php:根据中文裁减字符串函数方法】

define(CHARSET, 'UTF-8'); // 系统默认编码 /** * 根据中文裁减字符串 * @param $string - 字符串 * @param $lengt...
  • u011168635
  • u011168635
  • 2013年10月05日 10:09
  • 252

php:根据中文裁减字符串函数方法

php:根据中文裁减字符串函数方法
  • zyb_icanplay7
  • zyb_icanplay7
  • 2013年09月17日 10:45
  • 602

Linux 系统裁减指南1

一种创建小型化Linux系统的方法http://blog.csdn.net/tianhappy/archive/2005/11/09/526148.aspx初稿,文档结构,USB引导盘制作步骤。目 录...
  • iiprogram
  • iiprogram
  • 2008年04月18日 17:26
  • 1321

C#中indexof和substring函数用法 (截取字符串)

indexof() :在字符串中从前向后定位字符和字符串;所有的返回值都是指在字符串的绝对位置,如为空则为- 1string test="asdfjsdfjgkfasdsfsgfhgjgfjgdddd...
  • zxstone
  • zxstone
  • 2010年07月08日 15:27
  • 16424

DELPHI字符串处理函数大全(收藏在此方便以后查找使用)

uses StrUtils;【字符串函数大全】 首部 function AnsiResemblesText(const AText, AOther: string): Boolean; ...
  • bjtbjt
  • bjtbjt
  • 2013年08月05日 21:51
  • 3600

根据特征拆分字符串函数

首先 ALTER function [dbo].[fv_spit_str](@str varchar(8000)) returns table as return( select...
  • zc040921
  • zc040921
  • 2014年06月10日 10:30
  • 335

ORACLE常用数值函数、转换函数、字符串函数介绍

ORACLE常用数值函数、转换函数、字符串函数介绍。 数值函数: abs(m) m的绝对值 mod(m,n) m被n除后的余数 power(m,n) m的n次方 round(m[,n]) m四舍五入至...
  • vinsonshen
  • vinsonshen
  • 2007年04月24日 00:49
  • 1374

CCClinppingNode将图片裁剪出圆形

// 背景图     CCSprite *target = CCSprite::create("HelloWorld.png");     target->setAnchorPoint(CCPoi...
  • u010619611
  • u010619611
  • 2014年08月15日 11:19
  • 486

截取中文部分字符串函数

/*** 截取中文部分字符串** 截取指定字符串指定长度的函数,该函数可自动判定中英文,不会出现乱码** @access public* @param string    $str    要处理的字符...
  • srg23
  • srg23
  • 2006年11月23日 01:27
  • 554

android系统裁减之服务裁减

android系统服务分本地(native)服务和java服务。 1、本地(native)服务裁减 很明显:本地(native)服务是基于C/C++实现的,本地服务的启动都在init.rc中通过脚本的...
  • xl19862005
  • xl19862005
  • 2016年05月25日 17:07
  • 1140
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:根据中文裁减字符串函数的php代码
举报原因:
原因补充:

(最多只允许输入30个字)