请选择 进入手机版 | 继续访问电脑版
收藏本站腾讯微博新浪微博
点点网模板设计大赛 phpchina

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 用悬赏 三天解决问题 解决访问速度慢 论坛支持农历生日 - 给官方提建议

论坛活动及任务 归纳网站最新活动 地图任务 邮件更新任务:保护帐号安全

积分换实物,来参加蓝色理想积分兑换吧! 联系招聘客服 蓝色理想帮你找工作! 万元奖励等你拿——点点网模板设计大赛

查看: 2032|回复: 10

[php] 数组脏话查找关键字问题 [复制链接]

kelon 楼主
帖子
942
体力
1485
威望
0
居住地
广东省 广州市
发表于 2009-9-15 09:37:37 |显示全部楼层
以下是我的脏话的数组
  1. Array ( [0] => 中国|||我国|||大地 [1] => kelon|||lerke|||sb [2] => sex )
复制代码

我想在数组含有“中国|||我国|||大地”,当有一句话同时出现“中国,我国,大地”时就提示有脏话,其他的如“ [2] => sex”就直接提示提示有脏话,这样数组怎样查找啊!大大们,出来帮我看看吧
西部数码顶级域名注册商39元抢注!

垃圾青蛙

荣誉管理 手机认证 

帖子
26082
体力
51517
威望
21
居住地
福建省 厦门市
发表于 2009-9-15 10:00:10 |显示全部楼层
遍历这个数组,根据实际情况进行拆分。
当下标为0或1时,就拆分判断,当为2时直接判断是否存在就行了。
新一代四无新人,21世纪低碳男……博客 免费下载易提醒
租服务器,上51IDC | [长沙]招聘:PHP经理10K/WEB前端6K/PHP开发6K

使用道具 举报

kelon 楼主
帖子
942
体力
1485
威望
0
居住地
广东省 广州市
发表于 2009-9-15 10:33:17 |显示全部楼层
  1. function lktest($v,$keyword){
  2. foreach ($v as $k){
  3. if (strpos($k,"|||")!==false){
  4.     $kelon=explode("|||",$k);
  5.     //求数组最大值
  6.     $b=count($kelon);
  7.     foreach($kelon as $t){
  8.             //echo $t.'<br>';
  9.             if (preg_match('/'.$t.'/i',$keyword)){
  10.                     //echo "敏感关键字";
  11.                     $a=$a+1;                  
  12.         }
  13.         else{       
  14.         $a='';
  15.         }
  16.                    
  17.     }
  18.     //如果数组最大值跟$a相等时,则所有|||关键字都出现了
  19.     if ($a==$b){
  20.             echo "敏感关键字";       
  21.             }
  22.    }
  23. elseif(preg_match('/'.$k.'/i',$keyword)){
  24. echo "敏感关键字";
  25.     }     
  26. }
  27. }
复制代码

我这样做好像实现,不知哪位PHP精通一点,如果有更好方法,请指点一下吧!

使用道具 举报

罗亮

超级版主 手机认证 

帖子
15893
体力
19481
威望
19
居住地
北京市 海淀区
发表于 2009-9-15 10:56:55 |显示全部楼层
  1. <?php
  2. function checkCrud($str, $crud)
  3. {
  4.     if(is_array($crud) && !empty($crud))
  5.     {
  6.         foreach($crud as $value)
  7.         {
  8.             if(strpos($value, '|||') !== false)
  9.             {
  10.                 $cruds = explode('|||', $value);
  11.                 $num = count($cruds);
  12.                 $check = 0;
  13.                 foreach($cruds as $val)
  14.                 {
  15.                     if(strpos($str, $val) !== false)
  16.                     {
  17.                         $check++;
  18.                     }
  19.                 }
  20.                 if($check == $num)
  21.                 {
  22.                     return true;
  23.                 }
  24.             }
  25.             else
  26.             {
  27.                 if(strpos($str, $value) !== false)
  28.                 {
  29.                     return true;
  30.                 }
  31.             }
  32.         }
  33.         return false;
  34.     }
  35. }

  36. $crud = array('中国|||我国|||大地', 'kelon|||lerke|||sb', 'sex');
  37. $test1 = '我是中国人.我国人很多.大地上全是人.-__-!!好脑残的造句.';
  38. $test2 = '我是中xx国人.我xxx国人很多.大地上全是人.-__-!!好脑残的造句.';
  39. $test3 = '我是中国人.我x国人很多.大地上全是人.-__-!!好脑残sex的造句.';
  40. $test4 = '我是中国人.我x国人很多.大地上全是人.-__-!!好脑残seix的造句.';

  41. var_dump(checkCrud($test1, $crud));
  42. var_dump(checkCrud($test2, $crud));
  43. var_dump(checkCrud($test3, $crud));
  44. var_dump(checkCrud($test4, $crud));
  45. ?>
复制代码

[ 本帖最后由 wuleying 于 2009-9-15 11:04 编辑 ]

使用道具 举报

kelon 楼主
帖子
942
体力
1485
威望
0
居住地
广东省 广州市
发表于 2009-9-15 11:19:07 |显示全部楼层
谢谢银子!学习一下先。

使用道具 举报

laohoo 

老胡

金牌会员

帖子
2993
体力
3172
威望
5
发表于 2009-9-16 15:28:18 |显示全部楼层
效率太低, 请使用preg_match
Gonna miss freedom

使用道具 举报

kelon 楼主
帖子
942
体力
1485
威望
0
居住地
广东省 广州市
发表于 2009-9-16 16:49:22 |显示全部楼层
原帖由 laohoo 于 2009-9-16 15:28 发表
效率太低, 请使用preg_match

刚学PHP不久,一看到正则就头晕。大大,写个给我学习一下吧!

使用道具 举报

苦寒竹

管理员

帖子
19771
体力
17927
威望
23
居住地
浙江省 金华市
发表于 2010-12-1 12:04:53 |显示全部楼层
JS和ASP的:
1、

 提示:您可以先修改部分代码再运行



2、
  1. <%badwords="大地|神奇"
  2. content="大地真神奇"
  3. badwords=Split(badwords,"|")
  4. i=0
  5. for each name in badwords
  6. if InStr(content, badwords(i)) >0 then
  7.     response.write "有脏话"
  8.    end if
  9.   i=i+1
  10. next%>
复制代码
搞IT的穷秀才。

使用道具 举报

天使在线

银牌会员

帖子
796
体力
1702
威望
0
发表于 2010-12-1 20:36:14 |显示全部楼层

d

这问题很简单吧...

使用道具 举报

kran 

老蔡

银牌会员

帖子
2291
体力
1530
威望
0
居住地
北京市 朝阳区
发表于 2010-12-2 11:22:42 |显示全部楼层
  1. <?php
  2. $crud = array('中国|||我国|||大地', 'kelon|||lerke|||sb', 'sex');
  3. $crud = join('|',$crud);
  4. $crud = str_replace('|||', '|', $crud);
  5. $pat  = "/({$crud})/i";
  6. $txt = '我知道中国你是sex谁!!';
  7. preg_match/*_all*/($pat, $txt, $matches);
  8. var_dump($matches);
复制代码


不过听说过str_xxx的比preg_xxx效率要高

使用道具 举报

帖子
54
体力
284
威望
0
居住地
广东省 广州市
发表于 2010-12-2 22:04:14 |显示全部楼层
原帖由 kuhanzhu 于 2010-12-1 12:04 发表
JS和ASP的:
1、

 提示:您可以先修改部分代码再运行



2、0 then
    response.write "有脏话"
   end if
  i=i+1
next%>

js的那段學習了  謝謝分享

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|安久科技提供CDN|blueidea.com ( 京ICP备05002321号 )  

GMT+8, 2012-2-11 21:07 , Processed in 0.082956 second(s), 8 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部