Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Caracteres extraños

Estas en el tema de Caracteres extraños en el foro de Mysql en Foros del Web. Hola a todos. Tengo un formulario para subir fotos a BD. Mysql, guardo la ruta de la imagen en la BD, y la foto se ...
  #1 (permalink)  
Antiguo 20/05/2011, 17:32
 
Fecha de Ingreso: julio-2010
Ubicación: Cerca Sitges (Barcelona)
Mensajes: 98
Antigüedad: 10 años, 9 meses
Puntos: 4
Caracteres extraños

Hola a todos.

Tengo un formulario para subir fotos a BD. Mysql, guardo la ruta de la imagen en la BD, y la foto se guarda en el servidor.
Las fotos las sube correctamente, pero si el usuario que adjunta las fotos las sube con un nombre que contiene carácteres extraños (ñ^¨´`...).¡problemas!.
- La ruta del nombre de la imagen es guardado correctamente en la BD ej. /imagenes/6729be5c77tapón baño.jpg
- La imagen del ejemplo 6729be5c77tapón baño.jpg es guardada correctamente en la carpeta imagenes del servidor.
- ¡Problema! -> Al llamar la imagen desde la web, no me la carga correctamente por tener "carácteres extraños".
Código PHP:
Ver original
  1. <img src="<?php echo $row_vip10['foto1']; ?><? echo $registro['img']; ?>" alt="Tipo de tapon" width="110" height="106" vspace="0" border="0" align="middle" />
Alguna sugerencia.

Muchas gracias.
  #2 (permalink)  
Antiguo 20/05/2011, 18:06
 
Fecha de Ingreso: mayo-2011
Ubicación: Guadalupe, N.L, México
Mensajes: 45
Antigüedad: 10 años
Puntos: 6
Respuesta: Caracteres extraños

me puedes mostrar todo el codigo correcto para ayudarte mejor por que no te entiendo
  #3 (permalink)  
Antiguo 20/05/2011, 18:07
 
Fecha de Ingreso: mayo-2011
Ubicación: Guadalupe, N.L, México
Mensajes: 45
Antigüedad: 10 años
Puntos: 6
Respuesta: Caracteres extraños

me puedes mostrar todo el codigo de tu pagina en donde haces esto. Para ayudarte mejor, es que me equivoque en el otro mensaje.
  #4 (permalink)  
Antiguo 20/05/2011, 18:09
 
Fecha de Ingreso: mayo-2011
Ubicación: Guadalupe, N.L, México
Mensajes: 45
Antigüedad: 10 años
Puntos: 6
Respuesta: Caracteres extraños

Código PHP:
Ver original
  1. <img src="<?=$row_vip10['foto1']?><?=$registro['img']?>" alt="Tipo de tapon" width="110" height="106" vspace="0" border="0" align="middle" />
Modifica los echos por solamente la variable, asi no se confundira al encontrar el archivo.
pruebalo y me dices despues
  #5 (permalink)  
Antiguo 20/05/2011, 19:20
 
Fecha de Ingreso: noviembre-2008
Mensajes: 84
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Caracteres extraños

Haber, si dás a elegir al usuario renombrar la foto que sube al servidor, podría haber problemas con fotos del mismo nombre...lo mejor sería que el nombre de la foto (del archivo jpg) se guarde tomando en cuenta un identificador para evitar archivos con el mismo nombre...ej.

$nombrefoto=date("siHd").$nombredadoporusuario;

Tendrías que verificar que el usuario no introduzca un nombre con caracteres no permitidos por el servidor a la hora de llamar archivos, en todo caso que coloque un titulo (title) a la foto y no al nombre de archivo.
  #6 (permalink)  
Antiguo 21/05/2011, 09:39
 
Fecha de Ingreso: julio-2010
Ubicación: Cerca Sitges (Barcelona)
Mensajes: 98
Antigüedad: 10 años, 9 meses
Puntos: 4
Respuesta: Caracteres extraños

Evito duplicidad con numeración aleatoria 6729be5c77, antepuesto al nombre de archivo, por lo tanto es valor único, el problema es el servidor linux, que no reconoce caracteres extraños.

Para insertar foto

Código PHP:
Ver original
  1. <div align="center">
  2.             <div align="center">
  3.               <div align="center"> <span style="font-size: small">Imagen:</span>
  4.                 <input type = "file" name= "foto1" />
  5.               </div>
  6.             </div>
  7.           </div>

Lo subo al servidor junto con otros datos (servidor linux).

Código PHP:
Ver original
  1. <?
  2.     $db=mysql_connect("??","??","??",$db);
  3.         mysql_select_db("??",$db);
  4.      
  5.     $nombre=$_POST[nombre];
  6.         $apellido=$_POST[apellido];
  7.         $ciudad=$_POST[ciudad];
  8.         $comunidad=$_POST[comunidad];
  9.         $web=$_POST[web];
  10.         $titulo=$_POST[titulo];
  11.         $euros=$_POST[euros];
  12.         $nombre_usuario=$_POST[nombre_usuario];
  13.         $password=$_POST[password];
  14.         $mailcontacto=$_POST[mailcontacto];
  15.         $mail=$_POST[mail];
  16.         $telefono=$_POST[telefono];
  17.         $telefono2=$_POST[telefono2];
  18.         $provincia=$_POST[provincia];
  19.         $Pais=$_POST[Pais];
  20.         $ano_adquisicion=$_POST[ano_adquisicion];
  21.         $descripcion=$_POST[descripcion];
  22.         $categoria_=$_POST[categoria_];
  23.         $km=$_POST[km];
  24.         $m2=$_POST[m2];
  25.             $foto1 = $_FILES['foto1']['name'];
  26.         $prefijo = substr(md5(uniqid(rand())),0,10);
  27.        
  28.      
  29.     $uniqueID = substr(md5(uniqid(rand())),0,10);
  30.     $foto1 = $uniqueID.$_FILES['foto1']['name'];
  31.      
  32.      
  33.     // "directorio" es el directorio donde vas a subir la imagen.
  34.     mysql_query("insert into contactos( foto1 , foto2 ,  foto3 ,  foto4 ,  foto5 , nombre_usuario , password , mail , mailcontacto , telefono , telefono2 , nombre , apellido , web , titulo , descripcion , Pais , comunidad , ciudad , provincia , km , euros , ano_adquisicion , m2 , categoria_ )
  35.    values('/imagenes/$foto1','$foto2/datos internos/fotos/ico_sin_foto.gif','$foto3/datos internos/fotos/ico_sin_foto.gif','$foto4/datos internos/fotos/ico_sin_foto.gif','$foto5/datos internos/fotos/ico_sin_foto.gif','$nombre_usuario','$password','$mail','$mailcontacto','$telefono','$telefono2','$nombre','$apellido','$web','$tituloanuncio','$descripcion','$Pais','$comunidad','$ciudad','$provincia','$km','$euros','$ano_adquisicion','$m2','$categoria_')",$db) or die("La clave introducida, ya existe. Elige otra");  
  36.      
  37.     //ahora subamos la imagen, "directorio" es el directorio donde la vas a subir.
  38.     $copy = copy($_FILES['foto1']['tmp_name'], "../../imagenes/" . $uniqueID.$_FILES['foto1']['name']);
  39.      
  40.     ?>


¿Alguna referencia de código parecido pero que acepte carácteres extraños?

________

Este es el resultado de subir la imagen al servidor, 6729be5c77tapón baño.jpg,
Se puede evitar los acentos y ñ,

Si el usuario sube una foto llamada tapón baño.jpg , le añado 10 números aleatorios, 6729be5c77tapón baño.jpg
Hay alguna forma de eliminar el nombre del archivo “tapón baño” y mostrar por ejemplo “foto” 6729be5c77foto.jpg

Muchas gracias

Última edición por rafaxusirati; 21/05/2011 a las 09:54
  #7 (permalink)  
Antiguo 21/05/2011, 21:21
 
Fecha de Ingreso: noviembre-2008
Mensajes: 84
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Caracteres extraños

Hola de nuevo :P

Si no necesitas que el nombre de archivo de la imagen sea el mismo que el usuario elige desde el formulario...preferible que renombrés el nombre de la imagen reemplazando esos caracteres que te causan error en el servidor:
forosdelweb/eliminar-caracteres-raros-nombres-fotos

Si necesitas tener "caracteres extraños" en el nombre de archivo intenta agregando la función addslashes() a $foto1...

$foto1 = addslashes($_FILES['foto1']['name']);

...y al llamarla

<span style="font-size: small"><?php echo stripslashes($foto1); ?></span>

Me avisás q tal...menciono que yo renombro directamente con la función rename():

tapón baño.jpg por $identificador.jpg

Función rename()

Claro,solo necesito que guarde la imagen, no me interesa el nombre :)

Última edición por nanitoz; 21/05/2011 a las 21:34
  #8 (permalink)  
Antiguo 22/05/2011, 12:00
 
Fecha de Ingreso: julio-2010
Ubicación: Cerca Sitges (Barcelona)
Mensajes: 98
Antigüedad: 10 años, 9 meses
Puntos: 4
Respuesta: Caracteres extraños

Gracias, lo pruebo y te digo algo.
  #9 (permalink)  
Antiguo 22/05/2011, 12:23
 
Fecha de Ingreso: julio-2010
Ubicación: Cerca Sitges (Barcelona)
Mensajes: 98
Antigüedad: 10 años, 9 meses
Puntos: 4
Respuesta: Caracteres extraños

Me interesaría la opción Función rename(), pero con el enlace q me mandas no me termino de aclarar.

¿Dónde intercalo la Función rename() en mi código?

Sólo me interesa guardar la imagen, pero el código que encontré no me permite.

Muchas gracias.
  #10 (permalink)  
Antiguo 22/05/2011, 13:30
 
Fecha de Ingreso: noviembre-2008
Mensajes: 84
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Caracteres extraños

Hola de manera mas sencilla...hacemos esto:

Reemplaza esta linea:
$foto1 = $uniqueID.$_FILES['foto1']['name'];

Por esta:
//Obtenemos extensión de la imagen (jpg,gif,png,etc)
$ext= ".".substr($foto1,-3);

Luego en...
//ahora subamos la imagen, "directorio" es el directorio donde la vas a subir.
$copy = copy($_FILES['foto1']['tmp_name'], "../../imagenes/" . $uniqueID.$ext);

Guardará la imagen con su ID Unico ($uniqueID supongamos que es 6729be5c77 ),en:
../../imagenes/6729be5c77.jpg
  #11 (permalink)  
Antiguo 22/05/2011, 14:30
 
Fecha de Ingreso: julio-2010
Ubicación: Cerca Sitges (Barcelona)
Mensajes: 98
Antigüedad: 10 años, 9 meses
Puntos: 4
Respuesta: Caracteres extraños

Ahora la ruta de la imagen se guarda en la BD solo con el nombre de archivo y la extensión, quedando eliminado el número aleatorio de 10 dígitos.

¿Cómo podría invertir el orden? y que desaparezca en nombre de archivo, quedando solo el número aleatorio y la extensión.

Gracias.


Código PHP:
Ver original
  1. <?
  2.         $db=mysql_connect("??","??","??",$db);
  3.             mysql_select_db("??",$db);
  4.          
  5.         $nombre=$_POST[nombre];
  6.             $apellido=$_POST[apellido];
  7.             $ciudad=$_POST[ciudad];
  8.             $comunidad=$_POST[comunidad];
  9.             $web=$_POST[web];
  10.             $titulo=$_POST[titulo];
  11.             $euros=$_POST[euros];
  12.             $nombre_usuario=$_POST[nombre_usuario];
  13.             $password=$_POST[password];
  14.             $mailcontacto=$_POST[mailcontacto];
  15.             $mail=$_POST[mail];
  16.             $telefono=$_POST[telefono];
  17.             $telefono2=$_POST[telefono2];
  18.             $provincia=$_POST[provincia];
  19.             $Pais=$_POST[Pais];
  20.             $ano_adquisicion=$_POST[ano_adquisicion];
  21.             $descripcion=$_POST[descripcion];
  22.             $categoria_=$_POST[categoria_];
  23.             $km=$_POST[km];
  24.             $m2=$_POST[m2];
  25.             $foto1 = $_FILES['foto1']['name'];        //    ES CORRECTO????????
  26.             $prefijo = substr(md5(uniqid(rand())),0,10);   //    ES CORRECTO????????
  27.            
  28.          
  29.         $uniqueID = substr(md5(uniqid(rand())),0,10);
  30.         $ext= ".".substr($foto1,-3);
  31.  
  32.          
  33.         // "directorio" es el directorio donde vas a subir la imagen.
  34.         mysql_query("insert into contactos( foto1 , foto2 ,  foto3 ,  foto4 ,  foto5 , nombre_usuario , password , mail , mailcontacto , telefono , telefono2 , nombre , apellido , web , titulo , descripcion , Pais , comunidad , ciudad , provincia , km , euros , ano_adquisicion , m2 , categoria_ )
  35.       values('/imagenes/$foto1','$foto2/datos internos/fotos/ico_sin_foto.gif','$foto3/datos internos/fotos/ico_sin_foto.gif','$foto4/datos internos/fotos/ico_sin_foto.gif','$foto5/datos internos/fotos/ico_sin_foto.gif','$nombre_usuario','$password','$mail','$mailcontacto','$telefono','$telefono2','$nombre','$apellido','$web','$tituloanuncio','$descripcion','$Pais','$comunidad','$ciudad','$provincia','$km','$euros','$ano_adquisicion','$m2','$categoria_')",$db) or die("La clave introducida, ya existe. Elige otra");  
  36.          
  37.         //ahora subamos la imagen, "directorio" es el directorio donde la vas a subir.
  38.         $copy = copy($_FILES['foto1']['tmp_name'], "../../imagenes/" . $uniqueID.$ext);
  39.          
  40.         ?>

Última edición por rafaxusirati; 22/05/2011 a las 14:36
  #12 (permalink)  
Antiguo 22/05/2011, 14:57
 
Fecha de Ingreso: noviembre-2008
Mensajes: 84
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Caracteres extraños

Hola, solo tenés que concatenar el $uniqueID, reemplazando $foto1 en la consulta:
...values('/imagenes/".$uniqueID.$ext."','$foto2/datos internos/...

Si eso no va,deja como estaba esa linea y reemplaza esta:
$ext= ".".substr($foto1,-3);

Por...

$foto1=$uniqueID.".".substr($foto1,-3);

Y...
//ahora subamos la imagen, "directorio" es el directorio donde la vas a subir.
$copy = copy($_FILES['foto1']['tmp_name'], "../../imagenes/".$foto1);

Creo que así era la mejor opcion para empezar :P

Última edición por nanitoz; 22/05/2011 a las 15:07
  #13 (permalink)  
Antiguo 22/05/2011, 15:17
 
Fecha de Ingreso: julio-2010
Ubicación: Cerca Sitges (Barcelona)
Mensajes: 98
Antigüedad: 10 años, 9 meses
Puntos: 4
Respuesta: Caracteres extraños

Muchísimas gracias, funciona perfectamente.
Llevaba muchas horas (meses) buscando esta solución.

Y sería mucho abusar, limitar tamaño de foto y poner extensiones de foto.

Gracias.
  #14 (permalink)  
Antiguo 22/05/2011, 15:35
 
Fecha de Ingreso: noviembre-2008
Mensajes: 84
Antigüedad: 12 años, 5 meses
Puntos: 1
Información Respuesta: Caracteres extraños

Si querés limitar tamaño de archivo:

Código PHP:
Ver original
  1. $tamano_limite=1024000; // 1024000 Bytes = 1 MB
  2.  
  3. if($_FILES['foto1']['size']<$tamano_limite) //Si está en el rango < 1 MB
  4. {Subimos la foto...insertamos en base de datos,etc }
  5. else // De otra forma enviamos mensaje o etc... :D
  6.   echo "Tamaño de imagen muy grande, máximo 1 Mb";

Sobre extensiones?...lo que entiendo es que si suben un GIF,PNG o BMP, querés guardarlo como JPG, por decir?...

Si es así...solo concatena ".jpg" al uniqueID...

$foto1=$uniqueID.".jpg";

Tenes que reemplazar la variable $ext si la utilizás por ".jpg"...para que independiente de la extension de la imagen, siempre guarde en JPG.

Me avisás...por ahi entendí mal, y pedías "tamaño" de Alto y Ancho de la foto XD
  #15 (permalink)  
Antiguo 22/05/2011, 15:47
 
Fecha de Ingreso: julio-2010
Ubicación: Cerca Sitges (Barcelona)
Mensajes: 98
Antigüedad: 10 años, 9 meses
Puntos: 4
Respuesta: Caracteres extraños

Me pongo en ello.
Gracias
  #16 (permalink)  
Antiguo 26/05/2011, 12:33
 
Fecha de Ingreso: julio-2010
Ubicación: Cerca Sitges (Barcelona)
Mensajes: 98
Antigüedad: 10 años, 9 meses
Puntos: 4
Respuesta: Caracteres extraños

Hola otra vez,

Todo funciona ok, pero ahora intento limitar el espacio de la foto a subir a la BD. con el código q me pasasteis.

Gracias.

Código PHP:
Ver original
  1. <?
  2. $db=mysql_connect("??","??","??",$db);
  3.     mysql_select_db("??",$db);
  4.  
  5.         $nombre=$_POST[nombre];
  6.         $apellido=$_POST[apellido];
  7.         $ciudad=$_POST[ciudad];
  8.         $comunidad=$_POST[comunidad];
  9.         $web=$_POST[web];
  10.         $tituloanuncio=$_POST[tituloanuncio];
  11.         $euros=$_POST[euros];
  12.     $nombre_usuario=$_POST[nombre_usuario];
  13.     $password=$_POST[password];
  14.     $mailcontacto=$_POST[mailcontacto];
  15.     $mail=$_POST[mail];
  16.     $telefono=$_POST[telefono];
  17.     $telefono2=$_POST[telefono2];
  18.     $provincia=$_POST[provincia];
  19.     $Pais=$_POST[Pais];
  20.     $ano_adquisicion=$_POST[ano_adquisicion];
  21.     $descripcionanuncio=$_POST[descripcionanuncio];
  22.     $categoria_anuncio=$_POST[categoria_anuncio];
  23.     $km=$_POST[km];
  24.     $m2=$_POST[m2];
  25.     $foto1 = $_FILES['foto1']['name'];
  26.     $prefijo = substr(md5(uniqid(rand())),0,10);
  27.  
  28.  
  29.          $uniqueID = substr(md5(uniqid(rand())),0,10);
  30.          $foto1=$uniqueID.".".substr($foto1,-3);
  31.  
  32.  
  33. // "directorio" es el directorio donde vas a subir la imagen.
  34. mysql_query("insert into contactos( foto1 , foto2 ,  foto3 ,  foto4 ,  foto5 , nombre_usuario , password , mail , mailcontacto , telefono , telefono2 , nombre , apellido , web , tituloanuncio , descripcionanuncio , Pais , comunidad , ciudad , provincia , km , euros , ano_adquisicion , m2 , categoria_anuncio )
  35. values('/imagenes/$foto1','$foto2/datos internos/fotos/ico_sin_foto.gif','$foto3/datos internos/fotos/ico_sin_foto.gif','$foto4/datos internos/fotos/ico_sin_foto.gif','$foto5/datos internos/fotos/ico_sin_foto.gif','$nombre_usuario','$password','$mail','$mailcontacto','$telefono','$telefono2','$nombre','$apellido','$web','$tituloanuncio','$descripcionanuncio','$Pais','$comunidad','$ciudad','$provincia','$km','$euros','$ano_adquisicion','$m2','$categoria_anuncio')",$db) or die("La clave introducida, ya existe. Elige otra");  
  36.  
  37. //ahora subamos la imagen, "directorio" es el directorio donde la vas a subir.
  38. $copy = copy($_FILES['foto1']['tmp_name'], "../../imagenes/".$foto1);
  39.  
  40.     $tamano_limite=1024000; // 1024000 Bytes = 1 MB
  41.      
  42.     if($_FILES['foto1']['size']<$tamano_limite) //Si está en el rango < 1 MB
  43.     {Subimos la foto...insertamos en base de datos,etc }     //Me da error en esta línea              
  44.     else // De otra forma enviamos mensaje o etc... :D
  45.     echo "Tamaño de imagen muy grande, máximo 1 Mb";
  46.  
  47. ?>&nbsp;

Gracias.

Etiquetas: caracteres, extraños
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 2 personas




La zona horaria es GMT -6. Ahora son las 16:48.