发一段自己整理的文本操作类
目前包含常用文本字符串无乱码截取,词意化时间,以及敏感词过滤(其中敏感词过滤需自己添加敏感词库类似于
- $config ['sensitive_words'] = array (
- '¤李刚',
- '西白',
- '双奇还源丹',
- '伟达',);
我这里因为在ci中使用,写到了敏感词配置文件中,如需他用请自行修改
)
最后上源码,不断完善中
- <?php
- /**
- * 提出文章摘要
- * @author liyi
- * @version 1.1
- * @since 10/07
- */
- class Articleoper {
- private static $_string = '';
- /**
- * 宽字符串截字函数
- *
- * @access public
- * @param string $str 需要截取的字符串
- * @param integer $start 开始截取的位置
- * @param integer $length 需要截取的长度
- * @param string $trim 截取后的截断标示符
- * @param string $charset 字符串编码
- * @return string
- */
- public static function subStr($str, $start, $length, $trim = "...", $charset = 'UTF-8')
- {
- if (function_exists('mb_get_info'))
- {
- $iLength = mb_strlen($str, $charset);
- $str = mb_substr($str, $start, $length, $charset);
- return ($length < $iLength - $start) ? $str . $trim : $str;
- }
- else
- {
- preg_match_all("/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/", $str, $info);
- $str = join("", array_slice($info[0], $start, $length));
- return ($length < (sizeof($info[0]) - $start)) ? $str . $trim : $str;
- }
- }
- /**
- * 词义化时间
- *
- * @access public
- * @param string $from 起始时间
- * @param string $now 终止时间
- * @return string
- */
- public static function dateWord($from, $now)
- {
- //fix issue 3#6 by saturn, solution by zycbob
- /** 如果不是同一年 */
- if (idate('Y', $now) != idate('Y', $from))
- {
- return date('y年m月d日', $from);
- }
- /** 以下操作同一年的日期 */
- $seconds = $now - $from;
- $days = idate('z', $now) - idate('z', $from);
- /** 如果是同一天 */
- if ($days == 0)
- {
- /** 如果是一小时内 */
- if ($seconds < 3600)
- {
- /** 如果是一分钟内 */
- if ($seconds < 60)
- {
- if (3 > $seconds)
- {
- return '刚刚';
- }
- else
- {
- return sprintf('%d秒前', $seconds);
- }
- }
- return sprintf('%d分钟前', intval($seconds / 60));
- }
- return sprintf('%d小时前', idate('H', $now) - idate('H', $from));
- }
- /** 如果是昨天 */
- if ($days == 1)
- {
- return sprintf('昨天 %s', date('H:i', $from));
- }
- /** 如果是前天 */
- if ($days == 2)
- {
- return sprintf('前天 %s', date('H:i', $from));
- }
- /** 如果是7天内 */
- if ($days < 7)
- {
- return sprintf('%d天前', $days);
- }
- /** 超过一周 */
- return date('n月j日', $from);
- }
- /**
- * 敏感词过滤或检查
- * @param string $string 要过滤的字符串
- * @param string $tostring 配置过滤后的替换字符
- * @param bool $justCheck 是否只是检查含有敏感词,如果有返回false
- * @return 过滤后的字符串或bool值(如果只是检查字符串中是否含有敏感词)
- */
- public static function filterWords($string,$tostring = '<span style="color:blue">"敏感词,已被过滤"</span>',$justCheck = FALSE)
- {
- if (isset($string))
- {
- $CI = & get_instance();
- $CI->load->config('sensitive_words');
- //读取敏感词库
- $filter = $CI->config->item('sensitive_words');
- //初始化要过滤的词
- self::$_string = $string;
- if (!$justCheck)
- {
- //替换敏感词
- self::$_string = str_replace(array_values($filter), $tostring, self::$_string);
- } else {
- //如果设置为只检查是否含有敏感词,循环敏感词库查找是否含有敏感词
- foreach ($filter as $key=>$value)
- {
- $checked = strpos($string,$value);
- if ($checked)
- {
- self::$_string = FALSE;//含有敏感词,返回false
- continue;
- }
- }
- }
- }
- return self::$_string;
- }
- }
- ?>
- 使用:
Articleoper::subStr();