Foros del Web » Programando para Internet » PHP »

purificar valor de variable

Estas en el tema de purificar valor de variable en el foro de PHP en Foros del Web. Hola el contenido de un formalio lo voy a pasar a una variable, y me gustaria "purificar" de alguna forma el contenido y pasarla a ...
  #1 (permalink)  
Antiguo 09/01/2006, 14:02
 
Fecha de Ingreso: febrero-2003
Mensajes: 753
Antigüedad: 14 años, 10 meses
Puntos: 2
purificar valor de variable

Hola el contenido de un formalio lo voy a pasar a una variable, y me gustaria "purificar" de alguna forma el contenido y pasarla a una nueva variable ya "limpia"

Por ejemplo

$mala = "Hola esto es una prueba el día es nublado, y las hojas de los madroños empiezan a caerse, ¿porque ocurre eso? "no lo se" fin"

purifica el codigo y queda asi pasando el texto bueno a $bueno

$bueno "Hola esto es una prueba el dIa es nublado, y las hojas de los madroNos empuezan a caerse porque ocurre eso? .no lo se. fin"

Seria sustituir las á é í ó ú por A E I O U, las ñ por N, la ¿ ¡ hacia arriba por nada y las comillas doble y simples por puntos, seria eso posible?

saludos
  #2 (permalink)  
Antiguo 09/01/2006, 14:07
 
Fecha de Ingreso: enero-2006
Mensajes: 17
Antigüedad: 11 años, 11 meses
Puntos: 0
Usa un array con los caracteres que quieras sustituir, otro array con los caracteres a reemplazar y usa la función Str_replace

Así:
Código PHP:
$bueno str_replace($array_caracteres_reemplazar,$array_caracteres_reemplazados,$mala); 
  #3 (permalink)  
Antiguo 09/01/2006, 14:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. por qué quieres quitar esos caracteres?

Lo que deberías hacerlos es codificarlos.

Es decir, .. las comillas (si no te vienen ya ..) escaparlas con addslashess() (para que queden como \"no lo se\")

Y el resto (ñ, acentos y demás) .. dependiendo de lo que hagas podrías pasarle utf8_decode() (Pero no al almacenarlo en tus BD sino cuando los extraigas de tus BD a base de tus consultas a tus BBDD) ... o bien url_encode() (si vas a generar un link por ejemplo para pasarlo por el URL a otro script)

Un saludo,
  #4 (permalink)  
Antiguo 09/01/2006, 15:13
 
Fecha de Ingreso: febrero-2003
Mensajes: 753
Antigüedad: 14 años, 10 meses
Puntos: 2
Y existe alguna instruccion que sirva para que devuelva el texto exclusivamente en letras y numeros? se me ocurre pasarlo por una base de dattos con un campo de propiedad especial en vez de varchar

saludos
  #5 (permalink)  
Antiguo 10/01/2006, 05:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En general todo tratamiento de una cadena (string) lo puedes "filtrar" o aplicar "patrones" con lo que se denominan: Expresiones regulares.

También tienes la opción que te planteó surho ... pero realmente deberías re-plantearte por qué quieres quitar caracteres como acentuados, ñ y demás. (te entiendo si quieres filtrar cosas como ~{}^´+[] ..)

A todo esto .. por mi parte no veo correcto "eliminar" indiscriminadamente caracteres, veo más últil y evitará confusiones a tus usuarios el "validar" que tu cadena (string) que solicitas cumpla tu patrón dato (con expresiones regulares), es decir; si tu no quieres que en un "nombre de un usuario" por ejemplo que estás creando en tus BD no tenga esos caracteres (ñ, acentos .. etc) .. OK, aplica el patrón y avisa a tu usuario que "tal dato" contiene caracters no válido o aceptados en tu sistema, pero .. NO se los modifiques o cambies. Imagina luego que el usuario pretenda "buscar" o usar ese "dato" que el usuario "creía" que quedó como: "ñoño" y tus rutinas lo filtraron y dejaron en tus BBDD algo como: nono.

Un saludo,
  #6 (permalink)  
Antiguo 10/01/2006, 05:35
 
Fecha de Ingreso: febrero-2003
Mensajes: 753
Antigüedad: 14 años, 10 meses
Puntos: 2
el comentario que quiero filtrar no va a pasar a una base de datos, va a ser enviado a un movil que no acepta esos caracteres (sera ingles su sofware), y cada vez que pone un caracter de esos sale "?" lo podria dejar asi, ?o?o o d?no se sabe muy bien lo que significa y asi el que reciba el SMS podra comprenderlo

saludos
  #7 (permalink)  
Antiguo 10/01/2006, 05:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
A ver empezado por ahí (para evitar todo el resto de comentarios y sugerencias!!!!)

En ese caso .. la solución de suroh insito que te podría servir. Y si quieres algo mejor pero más complicado .. usa expresiones regulares. Las expresiones regulares PHP te pone a tu disposición algunas funciones para usarlas .. pero NO es un tema directo de PHP (lo digo por el "patrón" que necesitas).

Si quieres ver sobre el tema:
http://www.ignside.net/man/php/regex.php


Un saludo,
  #8 (permalink)  
Antiguo 10/01/2006, 16:29
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 11 años, 11 meses
Puntos: 5
Buenas.

Si te muestra estos signos ???, me parece que es una buena señal. Es decir, acepta acentos, ñ's y un montón de otros símbolos, siempre que le pases los caracteres con la codificación correcta.

Si te muestra eso, estoy casi seguro de que es porque el dispositivo usa el encoding utf-8 (a mí me pasó muchas veces usando flash+mysql+php y me dió bastantes dolores de cabeza hasta que le agarré la vuelta).

Cuando le mandás iso-8859-1, que es el encoding que usa por defecto php cuando envía un echo (a menos que lo especifiques en header o escribas un metatag), el dispositivo no entiende algunos caracteres y te muestra "?".

Lo que tenés que hacer es mandarle utf8. Para eso, simplemente usá la función utf8_encode.

Código PHP:
$textoUTF8 utf8_encode($textoOriginal);
echo 
$textoUTF8
Asegurate de pasarle a cada string/cadena la función utf8_encode() antes de enviarla.

Una prueba/demostración de esto:

mostrar.php

Código HTML:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<?php
include("utf8.php");
include("iso.php");
?>
</body>
</html> 
utf8.php

Código HTML:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<b>Fuente original utf-8:</b><br>
Añoró<br>
</body>
</html> 
iso.php

Código HTML:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<b>fuente original iso-8859-1:</b><br>
Añoró<br>
<b>fuente original iso-8859-1, CON utf8_encode():</b><br>
<?= utf8_encode("Añoró") ?><br>
</body>
</html> 
El archivo iso.php está codificado justamente en iso-8859-1; utf8.php, en utf-8 y mostrar.php, también en utf-8.

Grabá estos 3 archivos en el mismo directorio y abrí mostrar.php Preferentemente con FireFox; con IE no debería haber problemas, pero asegurate de que en ver->codificación esté seleccionado utf-8 (en cualquier caso).

Ok. lo que ves por pantalla esta codificado en utf-8, entonces. Vas a ver que en la línea siguiente a "fuente original iso-8859-1:" aparecen los benditos ???.

Pero en la última, no. Viene de la misma fuente (es decir, es iso-8859-1), pero última línea está codificada a utf-8. O sea que ya no hay problemas para mostrar acentos, ñ's y otros caracteres.

Suerte

Califa
  #9 (permalink)  
Antiguo 10/01/2006, 16:46
 
Fecha de Ingreso: abril-2005
Mensajes: 139
Antigüedad: 12 años, 7 meses
Puntos: 1
Creo que lo mejor es que mires la codificacion como dice Califa y si no los patrones como dice Cluster, pero como supongo que querias algo parecido a esto aqui te lo dejo.

Código PHP:

function formateo($s) {
   
$s ereg_replace("[áàâãª]","a",$s);
   
$s ereg_replace("[ÁÀÂÃ]","A",$s);
   
$s ereg_replace("[ÍÌÎ]","I",$s);
   
$s ereg_replace("[íìî]","i",$s);
   
$s ereg_replace("[éèê]","e",$s);
   
$s ereg_replace("[ÉÈÊ]","E",$s);
   
$s ereg_replace("[óòôõº]","o",$s);
   
$s ereg_replace("[ÓÒÔÕ]","O",$s);
   
$s ereg_replace("[úùû]","u",$s);
   
$s ereg_replace("[ÚÙÛ]","U",$s);
     
$s str_replace("Ñ","N",$s);
     
$s str_replace("ñ","n",$s);
     
$s str_replace("ç","c",$s);
     
$s str_replace("Ç","C",$s);
     
$s str_replace("<"""$s);
     
$s str_replace(">"""$s);
     
$s str_replace("\'"""$s);
     
$s str_replace("/"""$s);
     
$s str_replace("%"""$s);
     
$s str_replace("javascript:"""$s);   
          
$strim($s);
         
// $s=htmlspecialchars($s);
return $s;

Para usarla yo lo hago cuando recibo la variable:

$varible=formateo($_POST['variable']);
$varible=formateo($_GET['variable']);

Etc,etc...
__________________
Ciao y suerte.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:36.