/**
* 设置关键词高亮的字符串处理函数
* @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-设置关键词高亮的字符串处理函数的更多相关文章

  1. 3.6 Lucene基本检索+关键词高亮+分页

    3.2节我们已经运行了一个Lucene实现检索的小程序,这一节我们将以这个小程序为例,讲一下Lucene检索的基本步骤,同时介绍关键词高亮显示和分页返回结果这两个有用的技巧. 一.Lucene检索的基 ...

  2. SQL注入的字符串连接函数

    在select数据时,我们往往需要将数据进行连接后进行回显.很多的时候想将多个数据或者多行数据进行输出的时候,需要使用字符串连接函数.在sqli中,常见的字符串连接函数有concat(),group_ ...

  3. Ruby:字符串处理函数

    字符串处理函数1.返回字符串的长度 str.length => integer 2.判断字符串中是否包含另一个串 str.include? other_str => true or fal ...

  4. SQLServer学习笔记<>sql的范围内查找,sql数据类型,字符串处理函数

    sql的范围内查找 (1)between.....and用法 通常情况下我们查找一个在某固定区域内的所有记录,可以采用>=,<=来写sql语句,例如:查找订单价格在1000到2000之间的 ...

  5. 常用的php字符串处理函数

    php常用的字符串处理函数 1.trim():从字符串的两端删除空白字符和其他预定义字符 ltrim():从字符串的左端删除空格和其他预定义字符 rtrim():从字符串的末端开始删除空白字符和其他预 ...

  6. Sql注入中连接字符串常用函数

    在select数据时,我们往往需要将数据进行连接后进行回显.很多的时候想将多个数据或者多行数据进行输出的时候,需要使用字符串连接函数.在sqli中,常见的字符串连接函数有concat(),group_ ...

  7. PHP学习系列(1)——字符串处理函数(5)

    31.ord() 函数返回字符串第一个字符的 ASCII 值. 语法:ord(string) 例子 <?php echo ord("h"); echo ord("h ...

  8. strtok、strtok_s、strtok_r 字符串切割函数

    1.strtok函数 函数原型:char * strtok (char *str, const char * delimiters); 參数:str,待切割的字符串(c-string):delimit ...

  9. 常用的JavaScript字符串处理函数及用法

    最近参加了几次前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等,如果你经常参加笔试或者也是一个过来人,相信你也跟我一样,发现字符串的处理是前端招聘过程中最 ...

随机推荐

  1. 关于前期在云服务器上部署TOMCAT服务器的问题

    如果你要将你的项目放在服务器上(针对云服务器),首先你必须要学会前期部署Tomcat的准备, 第一步:安装jdk,配置环境变量 这个比较简单,配置java环境变量最为简单的方法是将java的 (../ ...

  2. 高性能 TCP & UDP 通信框架 HP-Socket v3.2.3

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  3. 自己动手写ORM的感受

    之前看到奋斗前辈和时不我待前辈的自己动手写ORM系列博客,感觉讲解的通俗易懂,清晰透彻.作为一个菜鸟,闲来也想着自己写一个ORM,一来加深自己对 ORM的理解,以求对EF,NHibernate等ROM ...

  4. 向ES6靠齐的Class.js

    写在前面 在2008年的时候,John Resig写了一 Class.js,使用的方式如下: var Person = Class.extend({ init: function(isDancing) ...

  5. PresentViewController切换界面

    视图切换,没有NavigationController的情况下,一般会使用presentViewController来切换视图并携带切换时的动画, 其中切换方法如下: – presentViewCon ...

  6. 64位win7+vs2010编译.net3.5以前的版本问题

    一般编译会出现 1.“ResGen.exe”已退出,代码为2 问题处理 2.“错误 2 “LC.exe”已退出,代码为 -1. NBGIS.MainGIS” 3.“未能加载文件或程序集“ESRI.Ar ...

  7. Dev TreeList 总结

    1.表格的要求:如果要求有父子节点关系,则必须有ID和ParentID字段,并且父节点ParentID字段必须指向ID字段. 2.Access表格在穿入DATATABLE的时候,要想表现出父子节点关系 ...

  8. SharePoint 2013 User Profile Services之跨场发布

    在之前博客中已经描述了User Profile的两种配置场景,这篇博客将详细介绍微软官方推荐的配置方法. 测试环境的架构可以参考之前的博客内容,这里就不做介绍了,直接切入主题. 1. 在sp-farm ...

  9. Java Web中请求转发和请求包含

    1.都是在一个请求中跨越多个Servlet 2.多个Servlet在一个请求中,他们共享request对象.就是在AServle中setAttribute()保存数据在BServlet中由getAtt ...

  10. Java调用solrj5.5.3接口,查询数据

    前期准备 搭建solr服务 参考上一篇,搭建solr搜索服务. 添加依赖 maven工程的话,添加如下依赖, <!-- https://mvnrepository.com/artifact/or ...