Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Kase en 12 Abril 2011, 06:21 am



Título: limpiar un str de signos raros
Publicado por: Kase en 12 Abril 2011, 06:21 am
necesito limpiar un string de cualquier signo que no sea letra o numero

por ejemplo
$str = '¿cual es la raiz de 42?';
a
$str = 'cual es la raiz de 42';


alguna idea de como hacerlo de la forma mas eficiente posible?


Título: Re: limpiar un str de signos raros
Publicado por: Feedeex en 12 Abril 2011, 06:38 am
Código:
function comprobar_cadena($str) {
   $caracteres_permitidos = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
   for ($i = 0; $i < strlen($str); $i++) {
         if (strpos($caracteres_permitidos, substr($str,$i,1)) == FALSE) {
  return false;
} else {
  return true;
}
   }
  }

Lo llamás así:

Código:
$variable = comprobar_cadena($str);
if ($variable == TRUE) {
 echo "Existen signos no permitidos";
  } else {
 echo "Todo ok";
}


Título: Re: limpiar un str de signos raros
Publicado por: Kase en 12 Abril 2011, 06:58 am
Gracias!!  estaba buscando algo mas estilo python, pero  php se queda corto en ese aspecto =<

y esque demaciadas comparaciones causa mas tiempo de ejecuccion y de procesamiento.

almenos es un codigo limpio... ^^
muchas gracias


Título: Re: limpiar un str de signos raros
Publicado por: Kasi en 12 Abril 2011, 14:24 pm
Prueba mejor con una expresión regular y sustituye los resultados por ''.

Con esta puede que te sirva, haz pruebas y ya nos dirás.
Código
  1. $reg = '/\W\s/g';
  2. $str = 'Lo que tengas ? que * buscar';
  3. $rep = '';
  4. $result = preg_replace($reg, $rep, $str);

La expresión es muy simple y se puede mejorar, pero bueno para un primer apaño quizá te sirva.

Te dejo esta página, que a lo mejor te sirve de ayuda para creartelas.

http://gskinner.com/RegExr/

Un saludo


Título: Re: limpiar un str de signos raros
Publicado por: Spider-Net en 12 Abril 2011, 16:45 pm
Código
  1. function alfanumeric($string){
  2. $string=ereg_replace("[^A-Za-z0-9]", "", $string);
  3. return $string;
  4. }

Recibe una cadena y devuelve la cadena sólo con símbolos alfanuméricos, nada de caracteres especiales. Su uso.

Código
  1. $str = alfanumeric("¿cual es la raiz de 42?");
  2. echo $str;

Devuelve: cual es la raiz de 42


Título: Re: limpiar un str de signos raros
Publicado por: Shell Root en 12 Abril 2011, 22:06 pm
@Spider-Net, creo que falta agregarle un \s para los espacios, no?
Mejor usar preg_replace, ya que ereg_replace ésta obsoleta.


Título: Re: limpiar un str de signos raros
Publicado por: ~ Yoya ~ en 12 Abril 2011, 22:54 pm
Código
  1. /(?i)(?:[^\w]*)(?-i)/

Puedes usar este patrón junto a preg_replace().

Que en vez de eliminar caracteres especifico, elimino cualquier carácter que no sea alfanumérico  (http://es.wikipedia.org/wiki/Alfanum%C3%A9rico).

Ejemplo:

Código
  1. <?php
  2. echo preg_replace('/(?i)(?:[^\w]*)(?-i)/','','h[oL=a');
  3. ?>
  4.  

Salida:
Código:
hoLa

Saludos.


Título: Re: limpiar un str de signos raros
Publicado por: Castg! en 13 Abril 2011, 01:18 am
Yo hice esta función que crea un alias de un texto. Lo uso para cuando voy a ingresar un dato a la base de datos (un post de un blog por ejemplo, guardo el nombre Un post de programación!! [PHP][/i] y el alias un-post-de-programacion-php). Te dejo la función y editala a tu gusto, pero practicamente utiliza lo que ya te dijeron:

Esta es la función para que pegues en el archivo
Código:
function txtToAlias($flotaTitle='',$flotaLength=false){
preg_match_all('/[a-z0-9\-]+/',strtr(preg_replace('/\s+/','-',trim(strtolower($flotaTitle))), "àáâãäåèéêëìíîïòóôõöùúûüñ", "aaaaaaeeeeiiiiooooouuuun"),$return);
return ($flotaLength)?substr(implode($return[0]),0,$flotaLength):implode($return[0]);
}

Esta está resaltada pero hay problemas con àáâãäåèéêëìíîïòóôõöùúûüñ
Código
  1. function txtToAlias($flotaTitle='',$flotaLength=false){
  2. preg_match_all('/[a-z0-9\-]+/',strtr(preg_replace('/\s+/','-',trim(strtolower($flotaTitle))), "aaaaaaeeeeiiiiooooouuuun", "aaaaaaeeeeiiiiooooouuuun"),$return);
  3. return ($flotaLength)?substr(implode($return[0]),0,$flotaLength):implode($return[0]);
  4. }


Título: Re: limpiar un str de signos raros
Publicado por: Nakp en 13 Abril 2011, 04:09 am
pues IMHO casi la mejor solucion es la de kasi agregando \d para los numeros :P pero negativo eh ¬¬

Código
  1. $reg = '/[^\w\d\s]/i';
  2. $buffer = 'asdf8a7s6d5f4asdf#456789(&335GG/X>%X57';
  3.  
  4. preg_replace($reg, '', $buffer);

devuelve:
Citar
asdf8a7s6d5f4asdf456789335GGXX57

agregale espacios y sigue funcionando :P


Título: Re: limpiar un str de signos raros
Publicado por: dimitrix en 13 Abril 2011, 12:32 pm
Como narices esto:
Código:
/(?i)(?:[^\w]*)(?-i)/

puede referirse a letras y números :-|


Título: Re: limpiar un str de signos raros
Publicado por: ~ Yoya ~ en 13 Abril 2011, 14:30 pm
/(?i)(?:[^\w\s]*)(?-i)/

Es parecida a la de Nakp, la diferencia es que hago que sea insensible a mayúscula y minúscula desde el mismo patrón, así no tengo que agregarle el operador i. Así hago el patrón mas portátil xD.

Nose porque le agregan el \w\d si con \w basta...

Saludos.


Título: Re: limpiar un str de signos raros
Publicado por: Nakp en 13 Abril 2011, 15:48 pm
w es alfanumerico? Crei que eran solo letras x'D en fin :P es mas facil la que puse a me lo parece jajaja


Título: Re: limpiar un str de signos raros
Publicado por: ~ Yoya ~ en 13 Abril 2011, 16:09 pm
Si, es alfanumérico.