PHP利用strpos函数屏蔽关键字程序

在我们做留言板时经常会需要去屏蔽关键字一些关键字,下面我来介绍利用txt保存要屏蔽关键字,然后再根据用户提交的数据进行过滤.

先看strpos函数:strpos() 函数返回字符串在另一个字符串中第一次出现的位置,如果没有找到该字符串,则返回 false.

语法:strpos(string,find,start)

参数 描述

string 必需,规定被搜索的字符串.

find 必需,规定要查找的字符.

start 可选,规定开始搜索的位置.

提示和注释

注释:该函数对大小写敏感,如需进行对大小写不敏感的搜索,请使用 stripos() 函数.

例子,代码如下:

  1. <?php
  2. echo strpos("Hello world!","wo");
  3. ?>

一、把关键字专门写在一个文本文件里,每行一个,数量不限,有多少写多少.

二、PHP读取关键字文本,存入一个数组.

三、遍历关键字数组,挨个用strpos函数去看看内容有没有关键字,如果有,返回true,没有则返回false.

PHP实例代码如下:

  1. /**
  2. * PHP中用strpos函数过滤关键字
  3. * 琼台博客
  4. */
  5. // 关键字过滤函数
  6. function keyWordCheck($content){
  7. // 去除空白
  8. $content = trim($content);
  9. // 读取关键字文本
  10. $content = @file_get_contents('keyWords.txt');
  11. // 转换成数组
  12. $arr = explode("n", $content);
  13. // 遍历检测
  14. for($i=0,$k=count($arr);$i<$k;$i++){
  15. // 如果此数组元素为空则跳过此次循环
  16. if($arr[$i]==''){
  17. continue;
  18. }
  19. // 如果检测到关键字,则返回匹配的关键字,并终止运行
  20. if(@strpos($str,$arr[$i])!==false){
  21. //$i=$k;
  22. return $arr[$i];
  23. }
  24. }
  25. // 如果没有检测到关键字则返回false
  26. return false;
  27. }
  28. $content = '这里是要发布的文本内容。。。';
  29. // 过滤关键字
  30. $keyWord = keyWordCheck($content);
  31. //开源代码phpfensi.com
  32. // 判断是否存在关键字
  33. if($keyWord){
  34. echo '你发布的内容存在关键字'.$keyWord;
  35. }else{
  36. echo '恭喜!通过关键字检测';
  37. // 往下可以进行写库操作完成发布动作。
  38. }

写完代码后,故意在变量$content中写了一个关键字内容,然后运行发现没有检测到关键字,执行结果是通过,换成其它禁止的关键字都通过.

郁闷,开始判断是不是哪里出问题,编码问题?立即把keyWord.txt文件再次用记事本打开,然后另存为UTF-8格式,结果还是不行.

没有获取到keyWord.txt文本内容?立即 print_r() 发现正常读取并按行转成了数组,于是,我把关键字数组直接声明写成死的在程序中,代码如下:

  1. /**
  2. * PHP中用strpos函数过滤关键字
  3. * 琼台博客
  4. */
  5. // 关键字过滤函数
  6. function keyWordCheck($content){
  7. // 去除空白
  8. $content = trim($content);
  9. // 读取关键字文本
  10. //$content = @file_get_contents('keyWords.txt');
  11. // 转换成数组
  12. //$arr = explode("n", $content);
  13. // 直接在程序中声明关键字数组
  14. $arr = array('关键字1','关键字2','关键字3','关键字4'...);
  15. // 遍历检测
  16. for($i=0,$k=count($arr);$i<$k;$i++){
  17. // 如果此数组元素为空则跳过此次循环
  18. if($arr[$i]==''){
  19. continue;
  20. }
  21. // 如果检测到关键字,则返回匹配的关键字,并终止运行
  22. if(@strpos($str,$arr[$i])!==false){
  23. //$i=$k;
  24. return $arr[$i];
  25. }
  26. }
  27. // 如果没有检测到关键字则返回false
  28. return false;
  29. }
  30. //开源代码phpfensi.com
  31. $content = '这里是要发布的内容,含有关键字2';
  32. // 过滤关键字
  33. $keyWord = keyWordCheck($content);
  34. // 判断是否存在关键字
  35. if($keyWord){
  36. echo '你发布的内容存在关键字【'.$keyWord.'】';
  37. }else{
  38. echo '恭喜!通过关键字检测';
  39. // 往下可以进行写库操作完成发布动作。
  40. }
  41. // 程序运行结果:你发布的内容存在关键字【关键字2】
  42. // 程序正常

如果在PHP中声明关键字数组,就能起到作用,如果读取文本文件就无效,见鬼了?正在百思不得其解之时,想到了会不会是从文本文件中读取的内容有空格或者换行符没有过滤所导致?于是在遍历匹配那里加了一个trim函数.

加了trim()函数过滤空白后运行通过测试,原来瞎折腾了半天问题就在这里,代码如下:

  1. /**
  2. * PHP中用strpos函数过滤关键字
  3. * 琼台博客
  4. */
  5. // 关键字过滤函数
  6. function keyWordCheck($content){
  7. // 去除空白
  8. $content = trim($content);
  9. // 读取关键字文本
  10. $content = @file_get_contents('keyWords.txt');
  11. // 转换成数组
  12. $arr = explode("n", $content);
  13. // 遍历检测
  14. for($i=0,$k=count($arr);$i<$k;$i++){
  15. // 如果此数组元素为空则跳过此次循环
  16. if($arr[$i]==''){
  17. continue;
  18. }
  19. // 如果检测到关键字,则返回匹配的关键字,并终止运行
  20. // 这一次加了 trim()函数
  21. if(@strpos($str,trim($arr[$i]))!==false){
  22. //$i=$k;
  23. return $arr[$i];
  24. }
  25. }
  26. // 如果没有检测到关键字则返回false
  27. return false;
  28. }
  29. $content = '这里是要发布的文本内容。。。';
  30. //开源代码phpfensi.com
  31. // 过滤关键字
  32. $keyWord = keyWordCheck($content);
  33. // 判断是否存在关键字
  34. if($keyWord){
  35. echo '你发布的内容存在关键字'.$keyWord;
  36. }else{
  37. echo '恭喜!通过关键字检测';
  38. // 往下可以进行写库操作完成发布动作。
  39. }