2011-01-29 7 views
0

私は侮辱的な言葉を含む配列を作成しようとしています。誰かが配列の中にある単語のいずれかを提出しようとすると、エラーを受け取ります。PHPで特定の単語を検閲しますか?

私は数回試しましたが、失敗しました!

誰も私を助けてくれますか? :) foreach文を使用して、配列による

$censor_ary = array('word1', 'word2', 'word3'); 

    foreach ($censor_ary as $censor) 
    { 
     $word = $censor;  
    } 

if ($_POST['mesazhi'] == $word) 
     { 
      echo '<span>P&euml;rdorimi i fjal&euml;ve fyese nuk &euml;sht&euml; e mir&euml;seardhur</span>'; 
     } 
+4

これは正しく行うのが非常に難しい作業です。良い読書のために:http://www.codinghorror.com/blog/2008/10/obscenity-filters-bad-idea-or-incredibly-intercoursing-bad-idea.html –

+1

あなたが試したことがあるなら、コードには、ソリューションに近いかもしれません。 – greg0ire

+0

"私は数回試しましたが、失敗しました!" ...失敗は何でしたか?アレイの作成?潜在的な侮辱的な言葉をあなたの配列と比較するか? – chahuistle

答えて

1

シンプル、ループ、および単語が提出$_POST変数に含まれているかどうかを確認するためにpreg_matchを使用

またはこのような何か(私は仮定しています):

をここで
$arr = array('word1','word2'); 

foreach ($arr as $word) 
{ 
if (preg_match("$word",$data)) 
{ 
//error here 
} 
} 
+0

'$ arr =( 'word1'、 'word2'); 'ええ、新しい構文? ;-) – arnaud576875

+0

ああ、それはほとんどの部分のためのPerlの構文だろう:) –

2

はそれを次のとおりです。

$words = array('word1', 'word2', 'word3', '...'); 
$re_words = array(); 
foreach($words as $word) $re_words[] = preg_quote($word, '#'); 

if (preg_match('#\b(' . implode('|', $re_words) . ')\b#i', $post, $word) { 
    // error, the $post contains the word $word[0] 
} 

これは、$ words配列にリストされた単語を検出します。

3
$badWords = array(
    'bad' => '***', 
    'badly' => '***'); 

strtr("This is a bad sentence", $badWords); // This is a *** sentence 

不正な単語や削除されたバージョン(またはアスタミックス**)を含む配列を作成できます。そして、フィルタリングのためにstrtr()を使用することができます。

0

私のウェブサイトで動作しているこのコードを試すことができます。ここで変数と呼ばれるすべての変数を変数に置き換えます。あなたは括弧書きを含むCSVファイルが必要です。このコードは、誓い単語と誓い単語を含む偽の単語(例えば、Scunthorpe)とを区別することができます。また、単語を適切な数の星に置き換え、すべての共通接尾辞を認識します。実行には時間がかかることがありますが、偽陽性のリスクは大幅に軽減されます。

//inport profanities csv and list suffixes 
$profanities=explode(",", file_get_contents('NAME OF YOUR CSV FILE GOES HERE')); 

$suffixes=array('','s','es','e','ed','ing','ted','ting','y','ty','d','head','bag','hole','wit','tard','er','ter','en','ten','est','test','able','ible','ful','full'); 

//get text input 
$sanitize_text=$YOUR VARIABLE HERE; 

//combine profanities and sufixes 
foreach($profanities as $profanity) 
{ 
foreach($suffixes as $suffix) 
{ 
$sanitize_terms=$profanity; 
$sanitize_terms.=$suffix; 
$word=$sanitize_terms; 

$match_count=preg_match_all('/'.$word.'/i', $YOUR VARIABLE HERE, $matches); 
for($i=0; $i<$match_count; $i++) 
{ 
$bwstr=trim($matches[0][$i]); 
$sanitize_text=preg_replace('/\b'.$bwstr.'\b/', str_repeat("*", strlen($bwstr)), $sanitize_text); 
} 
} 
} 


$YOUR VARIABLE HERE=$sanitize_text;