php-设置关键词高亮的字符串处理函数
/**
* 设置关键词高亮的字符串处理函数
* @param [string] $str [要高亮的字符串]
* @param array $word_arr [关键词]
*/
function setKeyWords($str, $word_arr = array()) {
// 设置多字节字符内部编码为utf8
//mb_internal_encoding("UTF-8");
// 创建一个跟字符串长度一致的数组,用0填充
$map = array_fill(0, mb_strlen($str), 0);
// 遍历关键词数组,将关键词对应的map数组的位置上的数字置为1
foreach ($word_arr as $value) {
$pos = -1;
$pos_count = 0;
$pos_arr = array();
// 如果找到了这个关键词,就将这个词的位置存入位置数组中(来支持多次出现此关键词的情况)
while (($pos = mb_strpos(urldecode(strtolower(urlencode($str))), urldecode(strtolower(urlencode($value))), $pos + 1)) !== false && $pos_count < 5) {
$pos_arr[] = $pos;
$pos_count++;
}
// 遍历数组,将对应位置置1
foreach ($pos_arr as $pos_val) {
if ($pos_val !== false) {
$fill = array_fill($pos_val, mb_strlen($value), 1);
$map = array_replace($map, $fill);
}
}
$pos = null;
}
// 遍历map数组,加入高亮代码
$flag = 0;
$position = -1;
$result = ""; // 结果数组
foreach ($map as $key => $value) {
if ($value == 1) {
// 如果第一次出现1,则加上html标签头
if ($flag == 0)
$result.="<font color=\"red\">";
$flag = 1;
}else {
// 如果已经到了一个0,但上一个还是1时,加入html标签尾
if ($flag == 1) {
$position = $key - 1;
$flag = 0;
$result.="</font>";
}
}
if ($key == (count($map) - 1) && $value == 1) {
$result.=mb_substr($str, $key, 1);
$result.="</font>";
break;
}
// 将该位置的字符加入结果字符串中
$result.=mb_substr($str, $key, 1);
}
return $result;
}
php-设置关键词高亮的字符串处理函数的更多相关文章
- 3.6 Lucene基本检索+关键词高亮+分页
3.2节我们已经运行了一个Lucene实现检索的小程序,这一节我们将以这个小程序为例,讲一下Lucene检索的基本步骤,同时介绍关键词高亮显示和分页返回结果这两个有用的技巧. 一.Lucene检索的基 ...
- SQL注入的字符串连接函数
在select数据时,我们往往需要将数据进行连接后进行回显.很多的时候想将多个数据或者多行数据进行输出的时候,需要使用字符串连接函数.在sqli中,常见的字符串连接函数有concat(),group_ ...
- Ruby:字符串处理函数
字符串处理函数1.返回字符串的长度 str.length => integer 2.判断字符串中是否包含另一个串 str.include? other_str => true or fal ...
- SQLServer学习笔记<>sql的范围内查找,sql数据类型,字符串处理函数
sql的范围内查找 (1)between.....and用法 通常情况下我们查找一个在某固定区域内的所有记录,可以采用>=,<=来写sql语句,例如:查找订单价格在1000到2000之间的 ...
- 常用的php字符串处理函数
php常用的字符串处理函数 1.trim():从字符串的两端删除空白字符和其他预定义字符 ltrim():从字符串的左端删除空格和其他预定义字符 rtrim():从字符串的末端开始删除空白字符和其他预 ...
- Sql注入中连接字符串常用函数
在select数据时,我们往往需要将数据进行连接后进行回显.很多的时候想将多个数据或者多行数据进行输出的时候,需要使用字符串连接函数.在sqli中,常见的字符串连接函数有concat(),group_ ...
- PHP学习系列(1)——字符串处理函数(5)
31.ord() 函数返回字符串第一个字符的 ASCII 值. 语法:ord(string) 例子 <?php echo ord("h"); echo ord("h ...
- strtok、strtok_s、strtok_r 字符串切割函数
1.strtok函数 函数原型:char * strtok (char *str, const char * delimiters); 參数:str,待切割的字符串(c-string):delimit ...
- 常用的JavaScript字符串处理函数及用法
最近参加了几次前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等,如果你经常参加笔试或者也是一个过来人,相信你也跟我一样,发现字符串的处理是前端招聘过程中最 ...
随机推荐
- Hadoop多节点集群安装配置
目录: 1.集群部署介绍 1.1 Hadoop简介 1.2 环境说明 1.3 环境配置 1.4 所需软件 2.SSH无密码验证配置 2.1 SSH基本原理和用法 2.2 配置Master无密码登录所有 ...
- JMeter专题系列(七)聚合报告之 90% Line
JMeter 官网原文: 90% Line - 90% of the samples took no more than this time. The remaining samples at lea ...
- Java进阶(五)Java I/O模型从BIO到NIO和Reactor模式
原创文章,同步发自作者个人博客,http://www.jasongj.com/java/nio_reactor/ Java I/O模型 同步 vs. 异步 同步I/O 每个请求必须逐个地被处理,一个请 ...
- jq倾斜的动画导航菜单
效果预览网址:http://keleyi.com/keleyi/phtml/jqmenu/index.htm 支持IE.Chrome.火狐等浏览器 完整源代码,保存到HTML文件打开也可查看效果: & ...
- Struts2(1) —— 概述
1.Struts2框架介绍 Struts2框架是MVC流程框架,适合分层开发,框架应用实现不依赖于Servlet,使用大量的拦截器来处理用户请求,属于无侵入式的设计. 2.Struts2框架的流程原理 ...
- arcgis server10.2.2发布地图基础服务的具体步骤
1.直接打开制作好的.mxd文档,比如这里: 2.打开mxd文档之后,打开菜单:file-share as -services 弹出地图发布服务的界面: 点击publish之后,耐心的等待一段时间,地 ...
- 理解CSV文件以及ABAP中的相关操作
在很多ABAP开发中,我们使用CSV文件,有时候,关于CSV文件本身的一些问题使人迷惑.它仅仅是一种被逗号分割的文本文档吗? 让我们先来看看接下来可能要处理的几个相关组件的词汇的语义. Separat ...
- GoogleMap和高德地图最新的瓦片图地址是用什么加密或者压缩
https://mts1.googleapis.com/vt?pb=!1m4!1m3!1i13!2i2475!3i3029!2m3!1e0!2sm!3i293208756!3m9!2sen-US!3s ...
- SharePoint 2013 图文开发系列之WebPart
这是我们介绍SharePoint开发入门的第一篇,在这一篇里,我们会介绍SharePoint开发的几个关键物理路径,一些开发技巧和最基础的WebPart开发. 开发工具 在SharePoint 201 ...
- JavaScript单元测试框架JsUnit基本介绍和使用
JavaScript单元测试框架JsUnit基本介绍和使用 XUnit framework XUnit是一套标准化的独立于语言的概念和结构集合,用于编写和运行单元测试(Unit tests). 每一个 ...