Rent A Coder

Filtro de palabras en PHP

Imprimir Imprimir - Enviar a un amigo Enviar a un amigo
12345 (1 votos, promedio: 5 de 5)
Loading ... Loading ...

A raíz de un tema que vi en un foro, se me ocurrío 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 parametro es opcional. Si se pone, se retorna la cadena del primer parametro con las palabras prohibidas reemplazadas por el texto que se haya pasado como segundo parametro. Si no se especifica el segundo parametro, entonces la funcion retorna verdadero en caso de que se haya encontrado alguna palabra en el texto o falso en caso de que la cadena este limpia.

Ejemplo | Código del ejemplo

Algunas funciones en PHP

Imprimir Imprimir - Enviar a un amigo Enviar a un amigo
12345 (No calificado)
Loading ... Loading ...

Revisando unos archivos que tenía por ahi, encontré algo que había hecho hace un tiempo cuando llegué a necesitarlo. Se trata de las funciones str_split() y array_combine() para una versión de PHP menor a la 5. Aún cuando apoyo la migración hacia PHP5, puede que a alguien le puedan ser de utilidad estas funciones (y me sirve tenerlas como apunte.. nunca se sabe xD).

Es muy posible que haya formas mas simples y rápidas, pero en fin.. aqui están:

if (!function_exists('array_combine')) {
	function array_combine($a, $b) {
		$c = array();
		foreach ($a as $k)	$c[$k] = array_shift($b);
		return $c;
	}
}

if (!function_exists('str_split')) {
	function str_split($s, $c = 1) {
		return preg_split('/(.{'.$c.'})/i', $s, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
	}
}

De paso dejo una función que dado un color en forma ff0000, devuelve un arreglo con los valores de RGB.. bueno, es mas fácil entenderlo al ver la función xD

function html2rgb($color = null) {
	return ($color == null) ? false : array_map('hexdec', function_exists('str_split') ? str_split($color, 2) : preg_split('/([0-9a-f]{2})/i', $color, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY)) ;
}

$color = "CC00FF";
list($rojo, $verde, $azul) = html2rgb($color);

Esta función la usé en una clase que hice hace tiempo para crear una imagen con texto. Para mas info, nada mejor que ver la clase en PHP-Hispano.

Función Thumb

Imprimir Imprimir - Enviar a un amigo Enviar a un amigo
12345 (No calificado)
Loading ... Loading ...

Bueno, ando probando cosas en el blog, y ahora será el coloreado de sintaxis de código. Esta es una funcion que hice hace tiempo y que sirve para redimensionar una imagen proporcionalmente. Su modo de uso es bastante sencillo, consta de 5 parametros, dos de ellos opcionales:

$img - La imagen a redimensionar (string)
$w - El ancho máximo (int)
$h - La altura máxima (int)
$fill - Si la imagen es mas chica, ¿se agranda al tamaño máximo (true, por defecto)? (boolean/opcional)
$save - ¿Guarda la imagen (true) o la muestra en el navegador (false, por defecto)? (boolean/opcional)

Ademas, cuando el 5º parámetro se pone en true (es decir, que la imagen se guarde en lugar de mostrarse), devuelve un arreglo que consiste en el nombre del thumbnail y sus medidas (ancho y alto).

list($thumbnail, $ancho, $alto) = thumb("imagen.jpg", 300, 300, true, true);
<?php
function thumb($img, $w, $h, $fill = true, $save = false) {
	if (!extension_loaded('gd') && !extension_loaded('gd2')) {
		trigger_error("No dispones de la libreria GD para generar la imagen.", E_USER_WARNING);
		return false;
	}

	$imgInfo = getimagesize($img);
	switch ($imgInfo[2]) {
		case 1: $im = imagecreatefromgif($img); break;
		case 2: $im = imagecreatefromjpeg($img);  break;
		case 3: $im = imagecreatefrompng($img); break;
		default:  trigger_error('Tipo de imagen no reconocido.', E_USER_WARNING);  break;
	}

	//Esta parte donde se sacan las medidas esta tomada de http://php-hispano.net/archivos/Funciones/170/1
	if ($imgInfo[0] <= $w && $imgInfo[1] <= $h && !$fill) {
		$nHeight = $imgInfo[1];
		$nWidth = $imgInfo[0];
	}else{
		if ($w/$imgInfo[0] < $h/$imgInfo[1]) {
			$nWidth = $w;
			$nHeight = $imgInfo[1]*($w/$imgInfo[0]);
		}else{
			$nWidth = $imgInfo[0]*($h/$imgInfo[1]);
			$nHeight = $h;
		}
	}

	$nWidth = round($nWidth);
	$nHeight = round($nHeight);

	$newImg = imagecreatetruecolor($nWidth, $nHeight);

	imagecopyresampled($newImg, $im, 0, 0, 0, 0, $nWidth, $nHeight, $imgInfo[0], $imgInfo[1]);

	if ($save === true) {
		$name = array_shift(explode(".", $img, 2)).".th.".strtolower(array_pop(explode(".", $img)));

		if (!file_exists($name)) {
			switch ($imgInfo[2]) {
				case 1: imagegif($newImg, $name); break;
				case 2: imagejpeg($newImg, $name);  break;
				case 3: imagepng($newImg, $name); break;
				default:  trigger_error('Imposible mostrar la imagen.', E_USER_WARNING);  break;
			}
		}
		return array($name, $nWidth, $nHeight);
	}else{
		header("Content-type: ". $imgInfo['mime']);

		switch ($imgInfo[2]) {
			case 1: imagegif($newImg); break;
			case 2: imagejpeg($newImg);  break;
			case 3: imagepng($newImg); break;
			default:  trigger_error('Imposible mostrar la imagen.', E_USER_WARNING);  break;
		}

		imagedestroy($newImg);
	}
}
?>

Antes de ponerla aqui le hice unas modificaciones, espero aun sirva xD

Google: SoC

Imprimir Imprimir - Enviar a un amigo Enviar a un amigo
12345 (No calificado)
Loading ... Loading ...

Argh, por fin encuentro una mala razón para no estar estudiando: no puedo participar en el Google Summer of Code. Viendo los proyectos que hay, solo podría participar en aquellos que usen php, y entre ellos estaba viendo la to-do list de Coppermine Gallery.. muchas cosas de las que hay ahí estoy seguro que podría hacerlas u_u..

  • Text on images (True Type)
  • Documentation for newly-added watermarking feature
  • i18n of installer
  • Add rel=nofollow to the links that can be created by users in bbcode
  • log in with email address instead of password
  • Delete files older than XXX days to save webspace
  • Textarea in util.php to let user enter any query (similar to phpMyAdmin)
  • Set “Visitors can upload files” to yes for all albums at once
  • option to export albums/galeries/categories to an HTML album
  • RSS feed
  • New - since last visit icon
  • etc

Ains.. se veía tan interesante T-T.. y con eso de que dan USD $5000 (4500 para el estudiante, 500 para la organización) por proyecto, pues saldría bastante bien xD.. aun si en este caso varias contaran como uno solo por su simplicidad.

Lástima, pero no importa xD.. me serviría para distraerme, pero si funciona lo que estoy planeando hacer, entonces no tendría tiempo para eso. Igual en estos días veré si puedo hacer algo para la Coppermine Gallery.. siempre he querido colaborar en algún proyecto open source, y creo que esta sería una buena oportunidad.

C'ya!

Life.class.php

Imprimir Imprimir - Enviar a un amigo Enviar a un amigo
12345 (No calificado)
Loading ... Loading ...

Estaba aburrido… Life.class.php

<?php
include("Life.class.php");
$myLife = new Life();

$myLife->assignName('Eduardo');
$myLife->assignBirth('27-08-1986');
$myLife->setStatus('Sad');
$myLife->addTalent('Make people feel bad..');
$myLife->addNeed('Someone who i can talk with..');

$myLife->getLife();
?>

Y el resultado?

Hi, my name is Eduardo, i'm 20 years old. Today i feel Sad. I'm good for:

* Make people feel bad..

And why i feel Sad today? Because i need:

* Someone who i can talk with..

Bueno, nunca había trabajado con clases en PHP.. por algo se empieza =P