Блокировка вульгарных терминов из приглашения по электронной почте - PullRequest
0 голосов
/ 16 сентября 2009

Код ниже содержит некоторый код PHP, который позволяет пользователям отправлять приглашения по электронной почте другим. Работает нормально. Тем не менее, я пытаюсь добавить функцию под названием «check_porn_terms», так что ни один пользователь не может ввести свое имя как «порно» или другие вульгарные термины, а затем отправить по электронной почте под этим именем рекомендовать мой сайт. Переменная "$ _POST ['sendername']" - это имя пользователя.

Функция ниже не работает. Любая идея, как я могу заставить его работать?

Заранее спасибо,

John

function check_porn_terms($input) {
    $porn_terms = array("porn", "sex", "etc.");

    return !preg_match('#\b(' . join('|', array_map('preg_quote', $porn_terms)) . ')\b#i', $input);
}


$sendername = $_POST['sendername'];
$sendername = strtolower($sendername);

if(!check_porn_terms($sendername))
{

   session_write_close();
   header("Location:http://www.site.com/friends.htm");
   exit;

}

$msg = "<html><body>Hello, your friend ".htmlspecialchars($_POST['sendername'])." recommends that you use <a href='http://www.site.com/'>Site.com</a><br><br><img src='http://site.com/images/blacklogo.PNG'></body></html>";
$subject = "Try out Site.com";
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: ' . $_POST['sendername'] . "\r\n";
foreach($_POST['email'] as $email){
mail($email, $subject,$msg,$headers);
}

Ответы [ 3 ]

5 голосов
/ 16 сентября 2009

Вы спускаетесь по скользкому склону, пытаясь остановить это, как отмечено выше в справочной справке. Даже когда вы заставите работать приведенный выше код, его можно очень легко обойти, и вы будете постоянно сражаться в этой битве И вы будете непреднамеренно вызывать побочные эффекты, такие как блокирование хороших слов. Вы можете пересмотреть свою тактику по этому вопросу.

Прочтите их, чтобы подумать над этим:

http://thedailywtf.com/Articles/The-Clbuttic-Mistake-.aspx

https://blog.codinghorror.com/obscenity-filters-bad-idea-or-incredibly-intercoursing-bad-idea/

Имейте в виду, я думаю, что это замечательно - попытаться остановить пошлость, и я хотел бы знать о лучшей технике в мире программного обеспечения для решения этой проблемы ... (Я уверен, что кто-то придумал лучший способ).

0 голосов
/ 16 сентября 2009
function check_porn_terms($input) {
    $porn_terms = array("porn", "sex");
    $r = '`(' . implode('|', array_map('preg_quote',$porn_terms)) . ')`is';
    $ok = preg_match($r, $input,$m);
    return !$ok;
}

Обычно я не использую \b (границу слова) для сопоставления слов. и да, вероятно, это your Location: заголовок

0 голосов
/ 16 сентября 2009

Я понял это: мне пришлось добавить

ob_start();

вверху кода, в шапке. Я думаю, это потому, что я использовал это:

header("Location:http://www.site.com/friends.htm");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...