2012-05-03 10 views
0

連絡先フォームのメッセージ内に不適切な単語をフィルタリングする問題があります。 単語の最初の文字以外のすべてのメッセージを削除します。 助けてください?以下 連絡先フォームでPHPベースの単語をフィルタする問題

だけの情報

<?php 
$error = ''; 
if(!empty($_POST['username'])) $username = $_POST['username']; 
if(!empty($_POST['email'])) $email = $_POST['email']; 
if(!empty($_POST['subject'])) $subject = check($_POST['subject']); 
if(!empty($_POST['message'])) $msg = filter($_POST['message']); 

を取得しているこれは私が悪い言葉を除去し、オプションの下にそれらを

$bad_words = array(
'word1' => 'gosh', 
'word2' => 'darn',); 

function filter($matches) { 
global $bad_words; 
$replace = $bad_words[$matches[0]]; 
return !empty($replace) ? $replace : $matches[0]; 
} 

チェックドロップを置き換えるために使用しようとしています機能はありませんです特定の科目にメールを送ることができます。

function check($str){ 
global $error; 
if ($str == 'Mean Spirited Comment'){ 
    $error = 'You sent a Mean-Spirited Comment'; 
} else if ($str =='Political Comment'){ 
    $error = 'You sent a Political Comment'; 
} 
return $str; 
} 

場所情報と送信

$to = '[email protected]'; 
if (!empty($subject) && !empty($msg) && !empty($email) && !empty($username)){ 
if ($error == ''){ 
    mail($to, $subject, $msg, 'From:' . $email); 
} else { 
    print $error; 
} 
} 

?> 
+0

答えはありませんが、 'empty()'の代わりに 'isset()'を使うべきです。また、 'global'を使わないでください。 – PeeHaa

答えて

0

それは、配列を取ることができますので、あなたはstr_replaceを使用することができます。例えば

$message = "Hello there my good friends! I am very happy to see you all today even though I feel like crap."; 
$badWords = array("Crap", "Damnit", "Frack"); 
echo str_replace($badWords, "*", $message); 

結果は次のようになります。こんにちは私の良き友人!私は今日のようにあなたに会うことができてとても嬉しいです。

なぜPHPはすでにたくさんの有用なものを提供していますか?これは、送信されたメッセージから「悪い言葉」を除去するのに十分でなければなりません。

関連する問題