Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Añadir carpetas con tilde a un zip

Estas en el tema de Añadir carpetas con tilde a un zip en el foro de PHP en Foros del Web. Hola a todos. Llevo un par de horas dando vuelta a esto y no veo solución. Resulta, que en base a una carpeta creada (con ...
  #1 (permalink)  
Antiguo 23/06/2016, 08:48
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 8 años, 11 meses
Puntos: 39
Añadir carpetas con tilde a un zip

Hola a todos. Llevo un par de horas dando vuelta a esto y no veo solución.

Resulta, que en base a una carpeta creada (con subdirectorios y archivos dentro) necesito crearle el zip.
Éstas carpetas se muestran bien en el explorador de windows aunque algunas tengan vocales con acento. Sin embargo al traspasarlas al zip, no logro que los acentos se pasen.

Utilizo ésta función

Código PHP:
Ver original
  1. function agregar_zip($dir, $zip) {
  2.   //verificamos si $dir es un directorio
  3.   if (is_dir($dir)) {  
  4.     //abrimos el directorio y lo asignamos a $da
  5.     if ($da = opendir($dir)) {
  6.       while (($archivo = readdir($da)) !== false) {      
  7.         if (is_dir($dir . $archivo) && $archivo != "." && $archivo != ".." && $archivo != "archivos.zip" ) {          
  8.           agregar_zip($dir . $archivo . "/", $zip);            
  9.         } elseif (is_file($dir . $archivo) && $archivo != "." && $archivo != ".." && $archivo != "archivos.zip") {         
  10.                 // AQUI TENGO QUE PARSEAR DICHO DATO           
  11.             $zip->addFile($dir . $archivo, $renombre);
  12.  
  13.         }
  14.       }
  15.       //cerramos el directorio abierto en el momento
  16.       closedir($da);
  17.     }
  18.   }
  19. }

He intentando con:

Código PHP:
Ver original
  1. $renombre = utf8_decode($dir . $archivo);           // opcion1
  2.  
  3. $renombre = str_replace("ó","ó",$dir . $archivo); // opcion2
  4.  
  5. $renombre = utf8_encode($dir . $archivo); // opcion3

He intentado las 3 opciones que aparecen y ninguna me ha dado resultados. Cualquier ayuda es bien recibida, saludos!
  #2 (permalink)  
Antiguo 23/06/2016, 10:14
 
Fecha de Ingreso: enero-2006
Ubicación: Valencia
Mensajes: 96
Antigüedad: 18 años, 9 meses
Puntos: 1
Respuesta: Añadir carpetas con tilde a un zip

A mi me pasó lo mismo, al final opté por eliminar acentos y caracteres especiales

Código PHP:
$GLOBALS['normalizeChars'] = array(
    
'Å*'=>'S''Å¡'=>'s''Ã'=>'Dj','Ž'=>'Z''ž'=>'z''À'=>'A''Ã'=>'A''Â'=>'A''Ã'=>'A''Ä'=>'A'
    
'Ã…'=>'A''Æ'=>'A''Ç'=>'C''È'=>'E''É'=>'E''Ê'=>'E''Ë'=>'E''ÃŒ'=>'I''Ã'=>'I''ÃŽ'=>'I'
    
'Ã'=>'I''Ñ'=>'N''Ã’'=>'O''Ó'=>'O''Ô'=>'O''Õ'=>'O''Ö'=>'O''Ø'=>'O''Ù'=>'U''Ú'=>'U'
    
'Û'=>'U''Ãœ'=>'U''Ã'=>'Y''Þ'=>'B''ß'=>'Ss','Ã*'=>'a''á'=>'a''â'=>'a''ã'=>'a''ä'=>'a'
    
'Ã¥'=>'a''æ'=>'a''ç'=>'c''è'=>'e''é'=>'e''ê'=>'e''ë'=>'e''ì'=>'i''Ã*'=>'i''î'=>'i'
    
'ï'=>'i''ð'=>'o''ñ'=>'n''ò'=>'o''ó'=>'o''ô'=>'o''õ'=>'o''ö'=>'o''ø'=>'o''ù'=>'u'
    
'ú'=>'u''û'=>'u''ý'=>'y''ý'=>'y''þ'=>'b''ÿ'=>'y''ƒ'=>'f''ª'=>'a''º'=>'o'
); 
Código PHP:
$fichero strtr($fichero$GLOBALS['normalizeChars']); 
  #3 (permalink)  
Antiguo 23/06/2016, 11:04
 
Fecha de Ingreso: abril-2015
Ubicación: Barcelona
Mensajes: 28
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: Añadir carpetas con tilde a un zip

tener nombre de archivos con caracteres especiales, puede ser un dolor de cabeza, ya que si lo pones en un pc, es posible que no reconozca le nombre del archivo.

Como dice el otro compañero, recomiendo eliminar los caracteres especiales, si no puede prescindir de los accentos, mira en que codificación esta trabajando php los Strings.

EL código si no me acuerdo mal, no lo cree yo, pero al final lo acabo usando en todos los proyectos.
Código PHP:
    function elimina_acentos($text)    {
        
$text htmlentities($textENT_QUOTES'UTF-8');
        
$text strtolower($text);
        
$patron = array (
        
// Espacios, puntos y comas por guion
        //'/[\., ]+/' => ' ',
        
        // Vocales
        
'/\+/' => '',
        
'/à/' => 'a',
        
'/è/' => 'e',
        
'/ì/' => 'i',
        
'/ò/' => 'o',
        
'/ù/' => 'u',
        
        
'/á/' => 'a',
        
'/é/' => 'e',
        
'/í/' => 'i',
        
'/ó/' => 'o',
        
'/ú/' => 'u',
        
        
'/â/' => 'a',
        
'/ê/' => 'e',
        
'/î/' => 'i',
        
'/ô/' => 'o',
        
'/û/' => 'u',
        
        
'/ã/' => 'a',
        
'/&etilde;/' => 'e',
        
'/ĩ/' => 'i',
        
'/õ/' => 'o',
        
'/ũ/' => 'u',
        
        
'/ä/' => 'a',
        
'/ë/' => 'e',
        
'/ï/' => 'i',
        
'/ö/' => 'o',
        
'/ü/' => 'u',
        
        
'/ä/' => 'a',
        
'/ë/' => 'e',
        
'/ï/' => 'i',
        
'/ö/' => 'o',
        
'/ü/' => 'u',
        
        
// Otras letras y caracteres especiales
        
'/å/' => 'a',
        
'/ñ/' => 'n',
        
        
// Agregar aqui mas caracteres si es necesario
        
        
);
        
        
$text preg_replace(array_keys($patron),array_values($patron),$text);
        return 
$text;
    } 
  #4 (permalink)  
Antiguo 23/06/2016, 15:46
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 20 años, 5 meses
Puntos: 832
Respuesta: Añadir carpetas con tilde a un zip

Intenta usando esto:

Código PHP:
Ver original
  1. $unwanted_array = array(    'Š'=>'S', 'š'=>'s', 'Ž'=>'Z', 'ž'=>'z', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
  2.                             'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U',
  3.                             'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss', 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c',
  4.                             'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o',
  5.                             'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y' );
  6. $str = strtr( $str, $unwanted_array );
Visto aquí: https://stackoverflow.com/questions/...characters-php
  #5 (permalink)  
Antiguo 23/06/2016, 23:56
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 8 años, 11 meses
Puntos: 39
Respuesta: Añadir carpetas con tilde a un zip

Sí, que lo mejor fue eliminar o reemplazar más bien las letras con tildes por las letras sin tilde.
Al final de cuentas el cliente no se molestó.

Gracias @metacortex y @jucuegas, me había hecho falta buscar en stack.


@bruga, tu función me viene bien para otro proyectito un poco más formal.

De nuevo gracias a todos.
  #6 (permalink)  
Antiguo 24/06/2016, 05:02
 
Fecha de Ingreso: abril-2015
Ubicación: Barcelona
Mensajes: 28
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: Añadir carpetas con tilde a un zip

Cita:
Iniciado por rodocoyote15 Ver Mensaje
Sí, que lo mejor fue eliminar o reemplazar más bien las letras con tildes por las letras sin tilde.
Al final de cuentas el cliente no se molestó.

Gracias @metacortex y @jucuegas, me había hecho falta buscar en stack.


@bruga, tu función me viene bien para otro proyectito un poco más formal.

De nuevo gracias a todos.
una placer ayudar :), me olvide comentar que esta en formato "html" los simbolos.

Etiquetas: carpetas, tilde, zip
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:16.