【PHP程序高效率过滤非法内容的问题】-- 有类似问题请进来讨论,顶有分!
黑夜路人 博客专家认证 2006-01-16 06:41:05
项目是一个社区,需要做关键字过滤,主要就是过滤一些非法关键字,有关键字列表,每行一条,两千条左右,现在在用户提交文章的时候,对内容进行过滤,判断是否包含这些字符。
个人思路如下:
[ 精确匹配 ]
1. 把字符串进行去除空白,防止ASC中1-20的控制字符出现
2. 把文件读出来成为数组,使用排序函数进行排序,编码是UTF-8或GBK
3. 使用二分法对数组进行遍历,以最快的速度找到是否存在非法字符
[ 模糊匹配 ]
1. 把字符串进行去除空白,防止ASC中1-20的控制字符出现
2. 把文件读出来成为数组,使用排序函数进行排序,编码是UTF-8或GBK
3. 使用二分法对数组进行遍历,以最快的速度找到是否存在非法字符
4. 先正向匹配一次,就是让用户输入内容跟关键字列表进行匹配,然后再反向匹配一次,就是让关键字列表跟用户输入内容进行匹配
思路不知道对不对,反正目前是这么想的。
[ 问题 ]
问题1: 采用文本直接存储的方式速度是否足够快,一行一条太慢,同时可能以后会增加。是否需要使用B+树的方式来存储成二进制的,或者使用多重索引来存储。
问题2:遍历文件的话,采用何种算法比较合适,如果是文本文件,直接使用遍历数组的方式是否效率足够高?还是使用二分法或者其他算法,但是使用二分法必须先排序,排序的话涉及到关键字列表的编码问题,因为文件原来是GBK,转码后是UTF-8。
问题3:使用什么字符串匹配方式比较好?strcmp、strstr、strpos、或者mb_strpos,或者是直接==,或者使用正则,正则是使用ereg好还是preg_match好,那个效率高?
问题4:请大家讨论下存储方式和搜索方式,当然,不要涉及到太深,不要涉及到分词之类的,毕竟没有那么复杂。
很久没发贴,请大家一起讨论,谢谢,分不够再加,偶有的是分,呵呵!!