/**
* 设置关键词高亮的字符串处理函数
* @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. 突如其来的"中断异常",我(Java)该如何处理?

    一.何为异常? 1.生活中的实例 生活中存在许多不正常: 上班路上自行车掉链子 上厕所手机掉马桶 下班回家钥匙丢失 ....... 2.程序中的实例 我们的代码中也许存在许多纰漏,导致用户使用时程序突 ...

  2. Thinking in Java——笔记(19)

    Enumerated Types Basic enum features When you create an enum, an associated class is produced for yo ...

  3. (原) 1.3 zookeeper脚本使用

    本文为原创文章,转载请注明出处,谢谢 zookeeper自带脚本使用 1.进入zookeeper客户端 找到安装目录下的bin目录,执行以下脚本(中括号标示被必填) ./zkCli.sh  -time ...

  4. jQuery Ion.Calendar 日期/日历

    在线实例 实例演示 默认 实例演示 每周第一天 实例演示 输入框插件 实例演示 HTML data 属性 实例演示 回调函数1 实例演示 回调函数2 使用方法 <div id="cal ...

  5. HTML5有特色的进度条

    查看效果:http://keleyi.com/keleyi/phtml/html5/26.htm 完整代码如下: <!DOCTYPE html> <html> <head ...

  6. css之水平居中设置

    行内元素:     div,p{text-align:center;} 定宽块状元素:  第一宽度固定,第二margin-left和margin-right均是auto.div{border:1px ...

  7. js中的等值运算符(抽象相等==与严格相等===的区别)

    js中的等值运算符 js中的相等分为抽象相等和严格相等,他们有什么区别呢. 在说具体算法前,先提下JS数据类型,JS数据类型分为6类:Undefined Null String Number Bool ...

  8. MYSQL进阶,新手变司机

    一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT * FROM ( S ...

  9. java设计模式 模板方法模式Template Method

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.毫无疑问,设计模式于己 ...

  10. iOS检查App新版本并更新新版本

    检查新版本 更新  第一种方法 //检查新版本 更新 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ...