编码转换的问题到不难解决,用iconv或网上提供的程序即可做到。
数据量大的话用二分法速度肯定比数组快,不过要先排序正则用preg_match在效率上要高于ereg(手册上是这么说的,没测试过)

解决方案 »

  1.   

    如果用hash表呢?先将被检测项和准备过滤的关键字的hash表示匹配一下,这样可以排除许多可能,然后再测匹配的...这样是否能降低复杂度?
      

  2.   

    to  adouggy(李雅子) :你所谓的hash表法如何实现?是把整个文本文件进行hash还是把单个字符串hash?
      

  3.   

    把一个简单的问题想的太复杂了无论怎样做都需要检查每一个关键字是否包含在文件中
    由于不分词,所以也就不存在优化查询的问题$contents = str_replace($关键字数组, '', $contents);
      

  4.   

    用PHP么,这可是服务器端脚本!!!
    你不怕你的服务器太累啊??
    这种功能用JAVASCRIPT等客户端脚本来实现比较好。算法可以讨论,实现就用JS吧。
    十五刚开始学做程序员,如果话有不当就当放屁!不知道CSDN会不会把“放屁”给咔嚓了:P
      

  5.   

    发一个UBB的解析函数上来或许有用哦function JsUBB(str)
    {// 以下为十五工作室扩展UBB  str=str.replace("    ","    "); //四个空格
     str=str.replace("<","&lt;");
     str=str.replace(">","&gt;");
     str=str.replace("\n","<br>"); //回车换行
     str=str.replace("\r","<br>"); //回车
     str=str.replace("\t","&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"); //table//以下为标准UBB var re=/\[i\](.[^\[]*)\[\/i\]/gi;
     str=str.replace(re,"<i>$1</i>");   //斜体字
     re=/\[b\](.[^\[]*)\[\/b\]/gi;
     str=str.replace(re,"<b>$1</b>");   //粗体字
     re=/\[u\](.[^\[]*)\[\/u\]/gi;
     str=str.replace(re,"<u>$1</u>");  //下划线
     re=/\[color=(.[^\[]*)\](.[^\[]*)\[\/color\]/gi;
     str=str.replace(re,"<font color=$1>$2</font>");    //字体颜色
     re=/\[size=([1-7])\](.[^\[]*)\[\/size\]/gi;
     str=str.replace(re,"<font size=$1>$2</font>");     //字体大小
     re=/\[face=(.[^\[]*)\](.[^\[]*)\[\/face\]/gi;
     str=str.replace(re,"<font face=$1>$2</font>"); //字体 re=/\[center\](.[^\[]*)\[\/center\]/gi;
     str=str.replace(re,"<div align='center'>$1</div>");  //居中
     re=/\[right\](.[^\[]*)\[\/right\]/gi;
     str=str.replace(re,"<div align='right'>$1</div>");  //右对齐
     re=/\[quote\](.[^\[]*)\[\/quote\]/gi;  //引用
     str=str.replace(re,"<table bgcolor='#E6FFE6' width='90%' style='border:1px #009900 dotted' align='center'><tr><td class='td1'>$1</td></tr></table>"); re=/\[fly\](.*)\[\/fly\]/gi; //飞行
     str=str.replace(re,"<marquee width=90% behavior=alternate scrollamount=3>$1</marquee>");
     re=/\[move\](.*)\[\/move\]/gi; //移动
     str=str.replace(re,"<MARQUEE scrollamount=3>$1</marquee>");
     re=/\[SHADOW=*([0-9]*),*(#*[a-z0-9]*),*([0-9]*)\](.[^\[]*)\[\/SHADOW]/gi; //阴影
     str=str.replace(re,"<table width=$1><tr><td style='filter:shadow(color=$2, strength=$3)'>$4</td></tr></table>");
     re=/\[GLOW=*([0-9]*),*(#*[a-z0-9]*),*([0-9]*)\](.[^\[]*)\[\/GLOW]/gi; //外发光
     str=str.replace(re,"<table width=$1 ><tr><td style='filter:glow(color=$2, strength=$3)'>$4</td></tr></table>") re=/\[URL\](.[^\[]*)\[\/URL\]/gi;
     str=str.replace(re,"<a href='$1' target=_blank>$1</a>");  //超链接1
     re=/\[URL=(.[^\[]*)\](.[^\[]*)\[\/URL\]/gi;
     str=str.replace(re,"<a href='$1' target=_blank>$2</a>");  //超链接2 re=/\[EMAIL\]([\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+)\[\/EMAIL\]/gi;
     str=str.replace(re,"<a href='mailto:$1'>$1</a>");  //电子邮件链接1
     re=/\[EMAIL=([\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+)\](.[^\[]*)\[\/EMAIL\]/gi;
     str=str.replace(re,"<a href='mailto:$1'>$4</a>");  //电子邮件链接2 re=/\[img\](.[^\[]*)\[\/img\]/gi;
     str=str.replace(re,"<a href='$1' target=_blank><img src='$1' border='0' alt='单击在新窗口浏览'></a>");  //图片
     re=/:em(\d{1,}):/gi;
     str=str.replace(re,"<img src='emot/$1.gif' border='0'>"); //表情图标 return str;
    }
      

  6.   

    楼上的,这种用JS没意义,关闭JS就无效了,必须服务端检测
      

  7.   

    if(preg_match("/六 合 彩/",$_POST[message]))
      {
        $insert=false;
      }
      

  8.   

    如果发现有这个字就不插入数据库
    上面我发回贴csdn就是不行了所以我空了格