根据中文裁减字符串函数的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];
}
}
$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 字符串长度判断效率更高的方法
有经验的程序员发现,php判断字符串长度,使用isset()在速度上比strlen()更快,执行效率更高.即: 复制代码 代码如下: $str = 'aaaaaa';if(strlen($str) > 6)VSif(!isset($str{6}) 用例子简单测试下,情况基本属实,isset()效率几乎是strlen()的3倍.示例: 复制代码 代码如下: <?php //使用strlen方式 $arr = "123456"; $sTime = microtime(1); i
-
PHP字符串的递增和递减示例介绍
今天看到php手册上有这么一段话: "在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的.例如,在 Perl 中 $a = 'Z'; $a++; 将把 $a 变成'AA',而在 C 中,a = 'Z'; a++; 将把 a 变成 '['('Z' 的 ASCII 值是 90,'[' 的 ASCII 值是 91).注意字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z).递增/递减其他字符变量则无效,原字符串没有变化." 也就是说: 复制代码 代码如下
-
PHP preg_replace() 正则替换所有符合条件的字符串
需要我们用程序处理的数据并不总是预先以数据库思维设计的,或者说是无法用数据库的结构去存储的. 比如模版引擎解析模版.垃圾敏感信息过滤等等. 一般这种情况,我们用正则按我们的规则去匹配preg_match.替换preg_replace. 但一般的应用中,无非是些数据库CRUD,正则摆弄的机会很少. 根据前面说的,两种场景:统计分析,用匹配:处理用替换. PHP preg_replace() 正则替换,与Javascript 正则替换不同,PHP preg_replace() 默认就是替换所有符号匹
-
php判断字符串在另一个字符串位置的方法
复制代码 代码如下: $email='user@exe.com'; //定义字符串$result=strstr($email,'@'); //返回子字符串echo $result; strstr()函数搜索一个字符串在另一个字符串中的第一次出现. 该函数返回字符串的其余部分(从匹配点).如果未找到所搜索的字符串,则返回 false. 语法 复制代码 代码如下: strstr(string,search)输出结果"@exe.com"
-
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
简单的字符串截取方法,支持中文和其他编码,传入相对应的参数直接调用就可以了 复制代码 代码如下: /** * 字符串截取,支持中文和其他编码 * @static * @access public * @param string $str 需要转换的字符串 * @param string $start 开始位置 * @param string $length 截取长度 * @param string $charset 编码格式 * @param string $suffix 截断显示字符 * @r
-
php去除字符串换行符示例分享
第1种写法: 复制代码 代码如下: <?phpstr_replace("n", '', $str); ?> 第2种写法: 复制代码 代码如下: <?phpstr_replace("rn", '', $str); ?> 第3种写法: 复制代码 代码如下: <?phppreg_replace("/s/", '', $str); ?> 下面进行相关说明:首先说说 n,r,tn 软回车:在Windows中表示换行且回到
-
php截取中文字符串不乱码的方法
GBK编码截取示例 复制代码 代码如下: $str = '我是谁'; //gbk编码的字符串echo mb_substr($str, 0, 1, 'gbk'); //输出 我 mb_substr方法比substr多一个参数,用来指定字符串编码. utf-8编码截取示例 [code]$str = '我abc是谁'; //utf-8编码的字符串echo mb_substr($str, 0, 2, 'utf-8'); //输出 我a[/code 中英混合也完全没有问题. 友情提示 使用的时候要注意
-
php二维数组转成字符串示例
复制代码 代码如下: function arr2str ($arr){ foreach ($arr as $v) { $v = join(",",$v); //可以用implode将一维数组转换为用逗号连接的字符串 $temp[] = $v; } $t=""; foreach($temp as $v){ $t.="'".$v."'".",&quo
-
PHP字符串的连接的简单实例
很多时候我们需要将几个字符串连接起来显示,在PHP中,字符串之间使用"点"来连接,也就是英文中的句号".",具体使用方式如下: 复制代码 代码如下: <?php //定义字符串 $str1 = "Hello World!"; $str2 = "Welcome to HutaoW's BLOG!"; //连接上面两个字符串 中间用空格分隔 $str3 = $str1 . " " . $str2;
-
php 字符串压缩方法比较示例
php 提供的字符串压缩方法有 1.gzcompress - Compress a string This function compress the given string using the ZLIB data format. 2.gzencode - Create a gzip compressed string This function returns a compressed version of the input data compatible with the output
-
php中利用explode函数分割字符串到数组
分割字符串 //利用 explode 函数分割字符串到数组 复制代码 代码如下: <?php $source = "hello1,hello2,hello3,hello4,hello5";//按逗号分离字符串 $hello = explode(',',$source); for($index=0;$index<count($hello);$index++) { echo $hello[$index];echo "</br>"; } ?>
-
php中3种方法删除字符串中间的空格
第一种:使用正则 复制代码 代码如下: <?phpecho preg_replace('# #', '', 'ab ab');//输出 "abab"?> 第二种:使用str_replace()函数 复制代码 代码如下: <?phpecho str_replace(' ', '', 'ab ab');//输出 "abab'?> 第三种:使用strtr()函数 复制代码 代码如下: <?phpecho strtr('ab ab',
-
php 判断字符串中是否包含html标签
function judgeHtml($str){ if($str != strip_tags($str)){ echo '有'; }else{ echo '无'; }}judgeHtml('<p>a');echo '<br />';judgeHtml('a');输出:有 无
-
PHP字符串中特殊符号的过滤方法介绍
有时候我们会遇到过滤字符串中特殊字符的问题,本文提供了一个处理特殊字符串的方法,可能有遗漏,如果读者发现了可以留言告诉我,谢谢. 复制代码 代码如下: function strFilter($str){ $str = str_replace('`', '', $str); $str = str_replace('·', '', $str); $str = str_replace('~', '', $str); $str = str_replace('!', '', $st
-
php通过字符串调用函数示例
1. call_user_func 复制代码 代码如下: function a($b,$c){ echo $b; echo $c;}call_user_func('a', "111","222");call_user_func('a', "333","444"); //显示 111 222 333 444?> 调用类内部的方法比较奇怪,居然用的是array,不知道开发者是如何考虑的,当然省去了new,也是满有新意的:
-
多个PHP中文字符串截取函数
复制代码 代码如下: <?phpfunction sysSubStr($string,$length,$append = false) { if(strlen($string) <= $length ) { return $string; } else { $i = 0; while ($i < $length) { $stringTMP = substr($s
-
php截取字符串之截取utf8或gbk编码的中英文字符串示例
微博的发言有字数限制,其计数方式是,中文算2个,英文算1个,全角字符算2个,半角字符算1个.php中自带strlen是返回的字节数,对于utf8编码的中文返回时3个,不满足需求.mb_strlen 可以根据字符集计算长度,比如utf8的中文计数为1,但这不符合微博字数限制需求,中文必须计算为2才可以.google了下,找到一个discuz中截取各种编码字符的类,改造了下,已经测试通过.其中参数$charset 只支持gbk与utf-8. 复制代码 代码如下: $a = "s@@你好";
-
生成随机字符串和验证码的类的PHP实例
网上有很多的php随机数与验证码的代码与文章,真正适用的没有几个. 索性自己搞一个吧. 开始本节的php教程 吧,以下代码的实现,主要做到可以很好区分一个get_code(),另一个create_check_image(),输出图像直接调用后面的,session()取验证码时直接get_code()就ok,顺带提下使用session时必须将session_star()放在最前面. 代码如下: 复制代码 代码如下: <?phpclass RandCheckCode{ /*函数名称:g
随机推荐
- asp.net中调用winrar实现压缩解压缩的代码
- 非常不错的人生经典语句
- 深入理解javascript学习笔记(一) 编写高质量代码
- 如何让Win2000系统达到最佳性能
- LINUX下架设代理服务器的教程
- python3设计模式之简单工厂模式
- javascript 处理HTML元素必须避免使用的一种方法
- js实现浏览器窗口大小被改变时触发事件的方法
- php 操作调试的方法
- Thinkphp中Create方法深入探究
- PHP中在数据库中保存Checkbox数据(1)
- Laravel实现表单提交
- centos6.5下mysql 5.7.19 安装配置方法
- PHP类的使用 实例代码讲解
- JavaScript 常用函数库详解
- C#在Unity游戏开发中进行多线程编程的方法
- QQ空间非主流大图模块之香烟点燃寂寞
- PHP重置数组为连续数字索引的几种方式总结
- vue判断input输入内容全是空格的方法
- python 实现在Excel末尾增加新行