php关键字过滤
程序员文章站
2022-04-07 21:47:40
...
本篇文章给大家分享的内容是php关键字过滤 ,有着一定的参考价值,有需要的朋友可以参考一下
<?php class TrieTree { public $tree = array('我','过'); /** * 增加关键词到字典树 * * @param string $utf8_str */ public function add($utf8_str) { $chars = &UTF8Util::getChars($utf8_str); // 串结尾字符 $chars[] = null; $count = count($chars); $T = &$this->tree; for ($i = 0; $i < $count; $i ++) { $c = $chars[$i]; if (! array_key_exists($c, $T)) { // 插入新字符,关联数组 $T[$c] = array(); } $T = &$T[$c]; } return $this; } /** * 从字典树移除关键词 * * @param string $utf8_str */ public function remove($utf8_str) { $chars = &UTF8Util::getChars($utf8_str); $chars[] = null; // 先保证此串在树中 if ($this->_find($chars)) { $chars[] = null; $count = count($chars); $T = &$this->tree; for ($i = 0; $i < $count; $i ++) { $c = $chars[$i]; // 表明仅有此串 if (count($T[$c]) == 1) { unset($T[$c]); return; } $T = &$T[$c]; } } return $this; } /** * 从字典树查找关键词 * * @param string $utf8_str * @return boolean */ public function exists($utf8_str) { $chars = &UTF8Util::getChars($utf8_str); $chars[] = null; return $this->_find($chars); } private function _find(&$chars) { $count = count($chars); $T = &$this->tree; for ($i = 0; $i < $count; $i ++) { $c = $chars[$i]; if (! array_key_exists($c, $T)) { return false; } $T = &$T[$c]; } return true; } /** * 是否含有关键词 * * @param string $utf8_str * @param boolean $do_count * @return boolean|number */ public function contain($utf8_str, $do_count = false) { $chars = &UTF8Util::getChars($utf8_str); $chars[] = null; $len = count($chars); $Tree = &$this->tree; $count = 0; for ($i = 0; $i < $len; $i ++) { $c = $chars[$i]; // 起始字符匹配 if (array_key_exists($c, $Tree)) { $T = &$Tree[$c]; for ($j = $i + 1; $j < $len; $j ++) { $c = $chars[$j]; if (array_key_exists(null, $T)) { if ($do_count) { $count ++; } else { return true; } } if (! array_key_exists($c, $T)) { break; } $T = &$T[$c]; } } } return $do_count ? $count : false; } /** * 批量检查是否包含关键词 * * @param array $str_array * @return boolean */ public function containMulti($str_array) { if (\is_array($str_array)) { foreach ($str_array as $str) { if ($this->contain($str)) { return true; } } } return false; } /** * 导出序列化后的字典树 * * @return string */ public function export() { return serialize($this->tree); } /** * 导入序列化后的字典树 * * @param string $str */ public function import($str) { $this->tree = unserialize($str); } } class UTF8Util { public static function getChars($utf8_str) { $s = $utf8_str; $len = strlen($s); if ($len == 0) return array(); $chars = array(); for ($i = 0; $i < $len; $i ++) { $c = $s[$i]; $n = ord($c); // 0xxx xxxx, asci, single if (($n >> 7) == 0) { $chars[] = $c; } else // 1111 xxxx, first in four char if (($n >> 4) == 15) { if ($i < $len - 3) { $chars[] = $c . $s[$i + 1] . $s[$i + 2] . $s[$i + 3]; $i += 3; } } else // 111x xxxx, first in three char if (($n >> 5) == 7) { if ($i < $len - 2) { $chars[] = $c . $s[$i + 1] . $s[$i + 2]; $i += 2; } } else // 11xx xxxx, first in two char if (($n >> 6) == 3) { if ($i < $len - 1) { $chars[] = $c . $s[$i + 1]; $i ++; } } } return $chars; } } $utf8_str = new UTF8Util(); $utf_char = $utf8_str->getChars('佛教飞机撒方式的回复回复后我我认为回复日无法核实的回复我五花肉覅福热火么光和热规划局*韩国关乎二后过过过过过过过群军过军若绿可我让我陪我二骗人富可敌国及时来构架了');
相关推荐:
以上就是php关键字过滤 的详细内容,更多请关注其它相关文章!
推荐阅读
-
实例解析Java中的synchronized关键字与线程安全问题
-
一文精通Java中的volatile关键字
-
php用什么软件比较好(php一般用的开发工具)
-
phpeclipse运行php文件(eclipse php环境搭建)
-
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
-
PHP字符串函数系列之nl2br(),在字符串中的每个新行 ( ) 之前插入 HTML 换行符br
-
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
-
php 将字符串按大写字母分隔成字符串数组
-
Notice: Undefined index: page in E:PHP est.php on line 14
-
30 个很棒的PHP开源CMS内容管理系统小结