在我们做留言板时经常会需要去屏蔽关键字一些关键字,下面我来介绍利用txt保存要屏蔽关键字,然后再根据用户提交的数据进行过滤.
先看strpos函数:strpos() 函数返回字符串在另一个字符串中第一次出现的位置,如果没有找到该字符串,则返回 false.
语法:strpos(string,find,start)
参数 描述
string 必需,规定被搜索的字符串.
find 必需,规定要查找的字符.
start 可选,规定开始搜索的位置.
提示和注释
注释:该函数对大小写敏感,如需进行对大小写不敏感的搜索,请使用 stripos() 函数.
例子,代码如下:
- <?php
- echo strpos("Hello world!","wo");
- ?>
一、把关键字专门写在一个文本文件里,每行一个,数量不限,有多少写多少.
二、PHP读取关键字文本,存入一个数组.
三、遍历关键字数组,挨个用strpos函数去看看内容有没有关键字,如果有,返回true,没有则返回false.
PHP实例代码如下:
-
-
-
-
-
- function keyWordCheck($content){
-
- $content = trim($content);
-
- $content = @file_get_contents('keyWords.txt');
-
- $arr = explode("n", $content);
-
- for($i=0,$k=count($arr);$i<$k;$i++){
-
- if($arr[$i]==''){
- continue;
- }
-
-
- if(@strpos($str,$arr[$i])!==false){
-
- return $arr[$i];
- }
- }
-
- return false;
- }
-
-
- $content = '这里是要发布的文本内容。。。';
-
-
- $keyWord = keyWordCheck($content);
-
-
- if($keyWord){
- echo '你发布的内容存在关键字'.$keyWord;
- }else{
- echo '恭喜!通过关键字检测';
-
- }
写完代码后,故意在变量$content中写了一个关键字内容,然后运行发现没有检测到关键字,执行结果是通过,换成其它禁止的关键字都通过.
郁闷,开始判断是不是哪里出问题,编码问题?立即把keyWord.txt文件再次用记事本打开,然后另存为UTF-8格式,结果还是不行.
没有获取到keyWord.txt文本内容?立即 print_r() 发现正常读取并按行转成了数组,于是,我把关键字数组直接声明写成死的在程序中,代码如下:
-
-
-
-
-
- function keyWordCheck($content){
-
- $content = trim($content);
-
-
-
-
-
- $arr = array('关键字1','关键字2','关键字3','关键字4'...);
-
- for($i=0,$k=count($arr);$i<$k;$i++){
-
- if($arr[$i]==''){
- continue;
- }
-
-
- if(@strpos($str,$arr[$i])!==false){
-
- return $arr[$i];
- }
- }
-
- return false;
- }
-
- $content = '这里是要发布的内容,含有关键字2';
-
- $keyWord = keyWordCheck($content);
-
-
- if($keyWord){
- echo '你发布的内容存在关键字【'.$keyWord.'】';
- }else{
- echo '恭喜!通过关键字检测';
-
- }
-
-
如果在PHP中声明关键字数组,就能起到作用,如果读取文本文件就无效,见鬼了?正在百思不得其解之时,想到了会不会是从文本文件中读取的内容有空格或者换行符没有过滤所导致?于是在遍历匹配那里加了一个trim函数.
加了trim()函数过滤空白后运行通过测试,原来瞎折腾了半天问题就在这里,代码如下:
-
-
-
-
-
- function keyWordCheck($content){
-
- $content = trim($content);
-
- $content = @file_get_contents('keyWords.txt');
-
- $arr = explode("n", $content);
-
- for($i=0,$k=count($arr);$i<$k;$i++){
-
- if($arr[$i]==''){
- continue;
- }
-
-
-
- if(@strpos($str,trim($arr[$i]))!==false){
-
- return $arr[$i];
- }
- }
-
- return false;
- }
- $content = '这里是要发布的文本内容。。。';
-
-
- $keyWord = keyWordCheck($content);
-
-
- if($keyWord){
- echo '你发布的内容存在关键字'.$keyWord;
- }else{
- echo '恭喜!通过关键字检测';
-
- }
|