2011年9月9日 星期五

php 濾髒話 濾字系統

如果你需要將一篇文章,濾掉其中某些特定的字詞,你需要這個
如果你需要將某段留言,濾掉其中某些特定的髒話....你需要這個
記得檔案的編碼要改成utf-8唷: )


<?php
class badLanguage
{
  public static $f_arr=1;
  public static $lastI=0;
  public function utfCharToNumber($char) {
    $i = 0;
    $number = '';
    while (isset($char{$i})) {
      //使用{}將字元再分離,以取得中文字ascii
      $number.= ord($char{$i});
      ++$i;
    }
    return $number;
  }

  public function _sortConf($ar1, $ar2){
    if ($ar1<$ar2)
    return true;
    else
    return false;
    if (strlen($ar1)>strlen($ar2))
    return true;
    else
    return false;
  }
  
  public function main($string,&$f_arr)
  {
    self::$f_arr=$f_arr;
    $len=mb_strlen($string,"UTF-8");
    $returnArr=array();
    $str_arr=array();
    for($i=0;$i<$len;$i++)
    {
      $c=mb_substr($string, $i,1,"UTF-8");
      array_push($str_arr,$c);
      $return=$this->bedLang($string,$c,$i);
      if($return) array_push($returnArr, $return);
    }
    //print_r($returnArr);
    foreach ($returnArr as &$value) {
      for($k=$value['ind'];$k<$value['ind']+$value['len'];$k++)
        $str_arr[$k]="✖";
    }
    return implode('',$str_arr);
  }
  private function bedLang($string,$c,$index)
  {
    $key=$this->utfCharToNumber($c);
    $farr=self::$f_arr[$key];
    if(false==isset($farr)) return;
    $farrLen=sizeof($farr);
    for($fI=0;$fI<$farrLen;$fI++)
    {
      $fStr=$farr[$fI];
      $fStrLen=mb_strlen($fStr,"UTF-8");
      if(($index+$fStrLen-1)<self::$lastI) return;
      if(1==$fStrLen) return array('ind'=>$index,'len'=>1);
      for($i=1;$i<$fStrLen;$i++)
      {
        $si=$i+$index;
        $fC=mb_substr($fStr, $i,1,"UTF-8");
        $sC=mb_substr($string, $si,1,"UTF-8");
        if($fC!=$sC)
          break;
      }
      if($i==$fStrLen)
      {
        self::$lastI=$index+$fStrLen-1;
        return array('ind'=>$index,'len'=>$fStrLen);
      }
    }
  }
  
  }
  ?>
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<TITLE>AZ.lib</TITLE>
</HEAD>
  <?php
  //filter list source
  $source_arr=array(
'1920',
'ap',
'絕妙',
'運算',
'視訊',
'擴充',
'能力中',
'擴充能力中,取得最佳',
'擴充能',
'最佳平衡',
'920',
'運算效能',
'上視',
'電');
  usort($source_arr,array("badLanguage", "_sortConf"));
  $len=count($source_arr);
  $_bL=new badLanguage();
  $f_arr=array();
  for($i=0;$i<$len;$i++)
  {
    $c=mb_substr($source_arr[$i], 0,1,"UTF-8");
    $key=$_bL->utfCharToNumber($c);
    $l=count($f_arr[$key]);
    $f_arr[$key][$l]=$source_arr[$i];
  }
  echo $str="AP1920 輕薄的紙片型電腦,在絕妙的運算效能,精巧纖薄的外型設計,節能省電,即時的線上視訊與完整擴充能力中,取得最佳平衡的個人電腦,大大節省工作空間及提升工作效率。 ";
  echo "</br>";
  echo $_bL->main($str,$f_arr);
  ?>
真正在跑的時後 會先把濾字用的清單sort出來成一份參考清單

沒有留言:

張貼留言