常常在WEB页面显示记录列表的时候需要对过长内容进行截取。
采用PHP内置的substr函数对中英混合字符串,特别是字符编码在UTF-8的情况下,支持非常不好,会出现乱码。
所以自己写了一个函数:
function truncate($string, $len, $wordsafe = FALSE) {
$slen = strlen($string);
if ($slen <= $len) {
return $string;
}
if ($wordsafe) {
while (($string[-- $len] != ' ') && ($len > 0)) {
};
}
if ((ord($string[$len]) < 0x80) || (ord($string[$len]) >= 0xC0)) {
return substr($string, 0, $len) . "...";
}
while (ord($string[-- $len]) < 0xC0) {
};
return substr($string, 0, $len) . "...";
}
经测试成功。YEAH!
=======================================================================
2012-06-15更新:
今天再次写了一个,好处是会把两个英文字符当作一个汉字字符的长度:
所以传递的需要截取多少个汉字的长度
function truncate($string, $len, $cnCharWidth = 2) {
$len = $len * $cnCharWidth;
$suffix = "...";
$newStr = "";
for ($i = 0, $j = 0; $i < $len; $i++, $j++) {
if (!isset($string[$j])) {
$suffix = "";
break;
}
$start = $j;
while ($j < ($start +3) && !(ord($string[$j]) < 0x80)) {
$j++;
}
if ($start == $j) {
$charLen = 1;
}
else {
$i = $i + 1;
$j--;
$charLen = 3;
}
$newStr .= substr($string, $start, $charLen);
}
return $newStr . $suffix;
}
分享到:
相关推荐
关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配。(因为我想学完之后写个语法高亮练手,所以用js代码当作例子) var str1 = "我是字符串1哦,快把我取走", str2 = "我是字符串2哦,快把我取走"; ...
昨天在《js 正则学习小记之匹配字符串字面量》谈到 /”(?:\\.|[^”])*”/ 是个不错的表达式,因为可以满足我们的要求,所以这个表达式可用,但不一定是最好的。 从性能上来说,他非常糟糕,为什么这么说呢,因为 ...
- **小记解析**:字符串,长度20000,包含小记的具体内容。 - **小记创建时间**:时间戳,记录小记创建的时间。 13. 小记-标签关联表数据元素: - **ID**:主键,整型,11位,用于唯一标识关联记录。 - **小记...
### PHP Web渗透实战案例分析 #### 一、背景介绍 本次渗透测试的目的是评估一个特定网站的安全性。根据文档描述,本次渗透测试的目标网站使用的是PHP Web程序,并且通过简单的尝试,测试人员发现了一个可能存在的...
这篇文章《咬人草小记》便是对这种植物的描述,以及作者与它亲密接触后的体验与思考。 文章的开始,是一段友人的警告:“这草,你可不能碰!”正是这句话,将作者的注意力引向了这种奇特的生物。咬人草的外表并...
环境: Linux s12084 2.6.9-67.ELsmp #1 SMP Wed ...小记一下。以备以后参考。 boost 库做得真好。在windows 平台, linux 平台下编译都很顺利。hp aCC 也宣称对 boost 1.35 完全支持 。 全部编译是很痛苦的过程
### C++11 新特性详解 #### 一、Auto 关键字的新用途 - **旧用途**:在C++11之前,`auto`关键字主要用于指定变量的存储期。 - **新用途**:C++11引入了类型推断的概念,`auto`变成了一个类型占位符,用于告诉...
在“android开发小记”这个主题中,我们可以深入探讨Android应用程序开发的相关知识,特别是通过查看提供的压缩文件中的代码示例。这些文件名如lesson_8_code.zip至lesson_20_codel.zip,以及不同的Mp3Player版本,...
随笔小记.doc
GeoStudio学习小记
2. **模式匹配**:这是一个在字符串中寻找特定子串的问题,常见的算法有KMP(Knuth-Morris-Pratt)算法和Boyer-Moore算法,它们在文本搜索和文本处理中非常实用。 3. **矩阵**:矩阵是二维数组,常见的操作有矩阵...
假设这些点是从一个潜在密度函数p(x)生成的,而该潜在密度函数是由K个分量组成的有限混合模型定义的。每个混合分量可以用概率密度函数p(x|zk, θk)表示,其中zk是一个指示变量,θk是相关参数。混合模型的参数集合记...
print 函数是 Python 中最基本的输出函数,它可以输出字符串、数值、布尔值、列表、字典等类型的数据。例如: ``` >>> print(1) 1 >>> print("Hello World") Hello World ``` 变量输出 print 函数可以输出变量的值...
正则表达式是一种常见的方式,可以匹配特定的字符串模式。例如,使用`re`库编写的正则表达式可以匹配并提取链接或特定文本。然而,对于更复杂的HTML结构,推荐使用XPath或CSS选择器。XPath是XML路径语言,可以通过`...
这份"java小记.rar"压缩包很可能包含了作者多年从事Java Web开发的经验总结,可能包括代码示例、笔记、最佳实践等内容。 在Java Web开发中,Servlet是核心部分,它是一个Java类,用于扩展服务器的功能,处理HTTP...
"每日小记"就是这样一款应用,它结合了记账和日记的功能,为用户提供了一个全面的生活记录平台。 首先,我们要了解记账的重要性。在个人财务管理中,记账是一个基础但至关重要的步骤。通过"每日小记",用户可以轻松...