Filtro de palabras en PHP

A raíz de un tema que vi en un foro, se me ocurrió hacer una pequeña función en PHP para censurar ciertas palabras en un texto. En realidad es bastante simple lo que hace, y gracias al poder de las expresiones regulares tiene muchas posibilidades. Aqui dejo la función y después paso a comentarla.

<?php
function filtrado($texto, $reemplazo = false) {
    $filtradas = 'p?uta, mierda, pendej[ao]s?';

    $f = explode(',', $filtradas);
    $f = array_map('trim', $f);
    $filtro = implode('|', $f);

    return ($reemplazo) ? preg_replace("#$filtro#i", $reemplazo, $texto) : preg_match("#$filtro#i", $texto) ;
}

Ahora la explicación:

  • Línea 3: Aquí se definen las palabras a buscar separadas por coma. Se puede hacer uso de comodines. Por ejemplo, “_p?uta_” censura “_puta_” y “_uta_”; “_pendej[ao]s?_” censura “_pendeja_”, “_pendejo_”, “_pendejos_”, “_pendejas_“.
  • Línea 5: Dividimos las palabras en un arreglo.
  • Línea 6: Limpiamos los posibles espacios en blanco alrededor de la palabra.
  • Línea 7: Las unimos con el caracter |.
  • Línea 9: El segundo parámetro es opcional. Si se pone, se retorna la cadena del primer parámetro con las palabras prohibidas reemplazadas por el texto que se haya pasado como segundo parámetro. Si no se especifica el segundo parámetro, entonces la función retorna verdadero en caso de que se haya encontrado alguna palabra en el texto o falso en caso de que la cadena este limpia.