Foros del Web » Programando para Internet » PHP »

Problema al subir un archivo usando UTF-8

Estas en el tema de Problema al subir un archivo usando UTF-8 en el foro de PHP en Foros del Web. Hola, resulta que tengo una web que esta codificada integramente con UTF-8 (php,html,mysql, los dic guardados en UTF-8 so¡in BOOm con notepa++, todo esta en ...
  #1 (permalink)  
Antiguo 24/05/2012, 06:32
 
Fecha de Ingreso: marzo-2012
Mensajes: 43
Antigüedad: 12 años, 9 meses
Puntos: 3
Problema al subir un archivo usando UTF-8

Hola, resulta que tengo una web que esta codificada integramente con UTF-8 (php,html,mysql, los dic guardados en UTF-8 so¡in BOOm con notepa++, todo esta en UTF-8)

Todo funciona bien a excepcion de la carga de imagenes.

Por ejemplo:

Con el archivo llamado
Sin título-1.gif'

En la db guarta esta ruta:
./imagenes/Sin tÃ*tulo-1.gif

Al rescatar la ruta me imprime correctamente:
<img src='./imagenes/promociones/1/3/Sin título-1.gif'' />

Pero me sube el archivo a la carpeta imagenes tambien con el nombre convertido a UTF-8, es decir, en el servidor tengo :
imagenes/Sin tÃ*tulo-1.gif

Por lo tanto no muestra la imagen, ya que la ruta esta bien pero el nombre del archivo subido esta aun en UTF-8.

PD: ¿por que todo el musno usa UTF-8 si ANSI Latin 1 es mucho mas comodo?
  #2 (permalink)  
Antiguo 24/05/2012, 06:50
 
Fecha de Ingreso: marzo-2012
Mensajes: 43
Antigüedad: 12 años, 9 meses
Puntos: 3
Respuesta: Problema al subir un archivo usando UTF-8

Bueno lo he solucionado haciendo esto despues de subir la imagen:

mb_convert_encoding($_POST['img_src'],'ISO-8859-1','UTF-8')

Pero es normal el fallo que tengo y necesito si o si usar esta funcion de PHP o algo estoy haciendo mal
  #3 (permalink)  
Antiguo 24/05/2012, 06:56
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 7 meses
Puntos: 1517
Respuesta: Problema al subir un archivo usando UTF-8

Como tus archivos están en utf-8 ese error va a ocurrir, por lo que usar esa función es correcto, en todo caso es bueno hacerlo aún más dinámico por si se recibe un archivo no necesariamente en iso-8859-1, yo hago en algunas ocaciones algo como
Código PHP:
Ver original
  1. function setEncoding($data)
  2. {
  3.     $encoding = mb_detect_encoding($data, 'ASCII, ISO-8859-1, UTF-8', true);
  4.     $encoding = ( ( $encoding !== false ) ? $encoding : 'ISO-8859-1' );
  5.     if($encoding != 'UTF-8'){
  6.         $data = iconv($encoding, 'UTF-8//TRANSLIT', trim($data));
  7.     }
  8.  
  9.     return $data;
  10. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #4 (permalink)  
Antiguo 26/05/2012, 12:30
 
Fecha de Ingreso: marzo-2012
Mensajes: 43
Antigüedad: 12 años, 9 meses
Puntos: 3
Respuesta: Problema al subir un archivo usando UTF-8

Muchas gracias por la respuesta, ahora me surge otra duda, resulta que en mi hosting la carga de imagenes con caracteres raros solo funciona sin esa funcion, es decir, si el fichero esta guardado con el nombre:

Sin tÃ*tulo-1.gif

Si formateo el archivo para guardarlo en el servidor con el nombre:

Sin título-1gif

entonces no la carga.

Porque mi servidor en localhost necesita que cambie el nombre del archivo y mi hosting no lo necesita?

Un saludo
  #5 (permalink)  
Antiguo 29/05/2012, 08:20
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 7 meses
Puntos: 1517
Respuesta: Problema al subir un archivo usando UTF-8

Debes colocar todos tus archivos como utf-8.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: html, imagenes, sql, utf-8
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 00:49.