Foros del Web » Programando para Internet » PHP »

Evitar caracteres como Ñ o tildes

Estas en el tema de Evitar caracteres como Ñ o tildes en el foro de PHP en Foros del Web. Hola, queria saber como puedo hacer para evitar q se suban ficheros que contengan caracrteres como tildes , Ñ etc... o que les cambie el ...
  #1 (permalink)  
Antiguo 24/04/2003, 15:23
Avatar de lochorui  
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 899
Antigüedad: 22 años, 2 meses
Puntos: 2
Evitar caracteres como Ñ o tildes

Hola, queria saber como puedo hacer para evitar q se suban ficheros que contengan caracrteres como tildes , Ñ etc... o que les cambie el nombre al archivo , cual es la funcion?

un saludo
  #2 (permalink)  
Antiguo 24/04/2003, 15:37
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 2 meses
Puntos: 5
Puedes usar expresiones regulares...

preg_replace()

Antes de dar nombre al archivo en el servidor, puedes cambiarle el nombre...

O bien, antes de tratar de subirlo, puedes hacerle un preg_match() y "rebotar" el intento de upload por contener caracteres especiales...

Saludos!
__________________
Manoloweb
  #3 (permalink)  
Antiguo 24/04/2003, 15:43
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 2 meses
Puntos: 5
Código PHP:
$varCaracteres = array ("/á/""/é/""/í/""/ó/""/ú/""/ñ/");
$varCaracteresHTML = array ("a""e""i""o""u""n");

function 
nombreOK($nombre)
    {
        
$texto preg_replace($GLOBALS["varCaracteres"], $GLOBALS["varCaracteresHTML"], strtolower($nombre)); 
        return 
$nombre;
    }


$nombreArchivo="Pañales.doc"
echo nombreOK($nombreArchivo);

// Devuelve "panales.doc" 
Saludos!
__________________
Manoloweb
  #4 (permalink)  
Antiguo 24/04/2003, 15:45
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 2 meses
Puntos: 5
Y si quieres evitar espacios...

Código PHP:
$varCaracteres = array ("/á/""/é/""/í/""/ó/""/ú/""/ñ/"," ");
$varCaracteresHTML = array ("a""e""i""o""u""n"""); 
__________________
Manoloweb
  #5 (permalink)  
Antiguo 24/04/2003, 15:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Y la expresión regular .. algo tipo:

^[0-9A-Za-z]*$

Usalo en tus ereg() o ereg_replace() o cualquier función de tratamiento de expresiones regulares.

Con esa expresión regualar limitas a solo caracteres de al A a la Z (incluido minusculas o mayusculas) y numeros .. (si usases eregi() no haría falta a-z con A-Z sobraría ..

Si quieres ver un manual de Expresiones regulares aplicadas a PHP:
http://www.ignside.net/man/php/regex.php

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 24/04/2003, 15:52
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 2 meses
Puntos: 5
Aunque esta ultima sugerencia de Cluster solo te ayudaría a EVITAR que los suban, no a cambiarles el nombre.

Por cierto... el link es muy bueno!

Salu2
__________________
Manoloweb
  #7 (permalink)  
Antiguo 24/04/2003, 15:52
Avatar de lochorui  
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 899
Antigüedad: 22 años, 2 meses
Puntos: 2
ok muchas thanks , voy a probra con todo lo que me habeis dicho
gracias
  #8 (permalink)  
Antiguo 24/04/2003, 18:05
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Manoloweb, puedes simplificar la traduccion usando strtr()
Código PHP:
$cadstrtr($cad"àáâãäåèéêëìíîïòóôõöùúûüñ""aaaaaaeeeeiiiiooooouuuun"); 
Y para lo de los espacios usas str_replace()...

un saludo,
  #9 (permalink)  
Antiguo 24/04/2003, 18:34
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 2 meses
Puntos: 5
Buen tip

Lo que pasa es que yo uso el otro para convertirlos a á y similares dentro de una clase con la que guardo cadenas en BD...

Saludos, y Gracias!
__________________
Manoloweb
  #10 (permalink)  
Antiguo 25/04/2003, 06:52
Avatar de lochorui  
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 899
Antigüedad: 22 años, 2 meses
Puntos: 2
Ok , eso ya lo he conseguido a la perfecccion , peor ahora hay 2 caraccteres q no me los consiguo cambiar q son ' y \

EL codigo q uso es este:
Código PHP:
//Si venimos de subir un tema
if (isset ($uptema)) {
set_time_limit(0);

$pretemastrtr($uptema_name"àáâãäåèéêëìíîïòóôõöùúûüñ""aaaaaaeeeeiiiiooooouuuun");
$newtema sprintf ("$usuario_login/%s"$pretema);
move_uploaded_file($uptema$newtema);
$temarm ereg_replace"mp3""rm"$newtema );

$linkstream ereg_replace"mp3""ram"$newtema );

$crearam=fopen($linkstream,"w+");

$fechadate("n,j,Y");


$desde= (mktime(0,0,0,$fecha));
fwrite($crearam,"http://www.musikaid.com/artistas/$temarm");. 
Gracias y un saludo

Última edición por lochorui; 25/04/2003 a las 06:56
  #11 (permalink)  
Antiguo 25/04/2003, 07:04
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
En ese caso usa str_replace().
No deberías preocuparte por el \ ya que no es un nombre de archivo válido (por lo menos en windows xDD)
  #12 (permalink)  
Antiguo 25/04/2003, 08:21
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
Aprovechando todo lo que se ha dicho, ¿no sería mejor a nivel programático verificar que SÓLO contuviera carácteres alfanúmericos, puntos y, como mucho, guiones?

Porque si defines lo que no puede contener, es posible que te olvides de algún símbolo no deseable "(", ")", "/", "*", "?"...
__________________
M a l d i t o F r i k i
  #13 (permalink)  
Antiguo 25/04/2003, 10:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Jejej Cain .. Por eso decía yo de usar una expresión regular de "Solo deja pasar el rango de caracteres que quieras .. descartando el resto" y no de "modificarlos" ..

Con lo cual el usuario que pretende suber X archivo con esas caracteristicas esté informado que no es un archivo válido en ese sistema .. Amablemente le indicas que lo modifique antes de subirlo. (o como mucho, pasar por el primer filtrado a modo de aviso y si continúa el proceso ahí actuar con el "capádo" de esos caracteres).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 25/04/2003, 10:48
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 2 meses
Puntos: 5


__________________
Manoloweb
  #15 (permalink)  
Antiguo 25/04/2003, 17:44
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Cluster, pero imagínate si un usuario sube un archivo de mas o menos 1.99 Mb con una conexion de 56 kbps que siempre falla (como la mia ) y todo esto para que luego le digas - "che, modifica el nombre y mandamelo de nuevo"... por lo menos a mi no me caería nada bien...
Creo que podría hacerse junto con tu ereg, una validacion javascript del lado del cliente y asi quedamos felices

Saluditos!
  #16 (permalink)  
Antiguo 26/04/2003, 18:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues sip.. fran86 .. antes una validación de "sintax" en el cliente y otra validación de seguridad en el servidor como siempre ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:40.