Problema de filtrado de palabras en el formulario de contacto basado en PHP

Tengo un problema al filtrar malas palabras dentro de un mensaje de formulario de contacto. Elimina todo el mensaje excepto la primera letra de la palabra. ¿Alguna ayuda?

a continuación solo se obtiene la información

<?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']);

esta es la función que estoy tratando de usar para quitar las malas palabras y reemplazarlas

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

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

comprueba las opciones desplegables y no permite que se envíen correos electrónicos con determinados asuntos.

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;
}

coloca la información y envía

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

?>

preguntado el 03 de mayo de 12 a las 15:05

No es una respuesta, pero deberías usar isset() en lugar de empty(). También por favor no use globals. -

1 Respuestas

Podría usar str_replace ya que puede tomar una matriz.

Por ejemplo:

$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);

Los resultados serían: ¡Hola mis buenos amigos! Estoy muy feliz de verlos a todos hoy aunque tengo ganas de *.

¿Por qué reinventar nuevos métodos cuando PHP ya ofrece muchos útiles? Esto debería ser suficiente para eliminar las "malas palabras" de los mensajes que se envían.

contestado el 03 de mayo de 12 a las 15:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.