Comunidad de diseño web y desarrollo en internet online

Problemas con caracteres especiales...

Citar            
MensajeEscrito el 27 Ene 2009 06:07 pm
Hola a todos:

Trataré de explicarme lo mejor posible para que me entendais. Mi problema es el siguiente:
Resulta que tengo subidos en un servidor una serie de archivos que están en una carpeta. Estos archivos pueden ser de diferentes extensiones (.RTF .PDF .DOC etc.) y el nombre de los archivos pueden llevar caracteres como tildes y ñ (y antes de que me digais nada, no puedo comprobar el nombre del archivo antes de subirlo porque es algo ajeno a la web). Entonces, al leer los archivos con la función read de php para luego mostrarlos y poder descargarlos, las tildes no se muestran bien en el navegador, por ejemplo en Mozilla me muestra un rombo con un signo de interrogación para abajo, y en Explorer me muestra un cuadrado, y al intentar descargalo no funciona porque está intentando descargar un archivo que no está en el servidor.
Intenté hacer lo siguiente (os pongo el codigo para que lo veais):

Código :

function cambiar_nombre($nombre)
{
   $longitud = strlen($nombre); //Almacenamos longitud para hacer el for
   $nom = ""; //Almacenamos el nuevo nombre, sin tildes ni ñ
   
   for($i=0; $i<$longitud; $i++)
   {
      switch($nombre[$i])
      {
         case "á":
            $nom = $nom . "a";
            break;
         case "é":
            $nom = $nom . "e";
            break;
         case "í":
            $nom = $nom . "i";
            break;
         case "ó":
            $nom = $nom . "o";
            break;
         case "ú":
            $nom = $nom . "u";
            break;
         case "Á":
            $nom = $nom . "A";
            break;
         case "É":
            $nom = $nom . "E";
            break;
         case "Í":
            $nom = $nom . "I";
            break;
         case "Ó":
            $nom = $nom . "O";
            break;
         case "Ú":
            $nom = $nom . "U";
            break;
         case "ñ":
            $nom = $nom . "n";
            break;
         case "Ñ":
            $nom = $nom . "N";
            break;
         case " ":
            $nom = $nom . "_";
            break;
         default:
            $nom = $nom . $nombre[$i];
      }
   }
   echo $nom;
   echo "<br>";
}


Solo compruebo las tildes, ñ y espacios (es lo unico que me hace falta) pero no me funciona porque cuando intenta comparar el caracter de la variable con á por ejemplo, no lo encuentra, ya que la función read no me lee á, sino que me lee un caracter extraño de los que se visualiza en el navegador.
Espero haberme explicado bien. :oops:
Gracias

Por naiara

25 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Ene 2009 03:13 am
Ubieras modificado los nombres antes de haberlos subidos al servidor.-

Aca un codigo menos engorozo:

Código :

$var1 = array("à", "è", "ì, "ò, "ù, "À", "È", "Ì", "Ò", "Ù","Ñ","ñ");
$var2 = array("a", "e", "i","o","u","A", "E", "I", "O", "U","N","n");
$string = str_replace($va1, $va2, "Hòla Mùndo de PHP");

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie7
Citar            
MensajeEscrito el 28 Ene 2009 04:08 am
excelente para york3rs

Por talcual

686 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 28 Ene 2009 09:27 am
Gracias, ya probé y ahora cambia el nombre, pero me de fan fallos en el rename:
[function.rename]: No such file or directory in ....

Alguien sabe de que es??

Por naiara

25 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Ene 2009 09:55 am
Listo ya está, era por los permisos de las carpetas. De todas formas no me acaba de susituir bien de todo las tildes. Vereis, hice lo siguiente:

include "funciones.php";

$path ="./clientes/$usuario/$carpeta/";
$elem = renombrar($elemento);
rename($path.$elemento, $path.$elem);

funciones.php

Código :

function renombrar($nombre)
{
   // Tranformamos todo a minusculas
   $nombre = strtolower($nombre);
      
   //Reemplazamos caracteres especiales latinos y otros
   $buscar = array('á', 'é', 'í', 'ó', 'ú', 'ñ', 'á', 'é', 'í', 'ó', 'ú', 'ä', 'ë', 'ï', 'ö', 'ü', 'ä', 'ë', 'ï', 'ö', 'ü', 'Ã', 'É', 'Ã', 'Ó', 'Ú', 'Ä', 'Ë', 'Ã', 'Ö', 'Ü', 'ñ');
   $repl = array('a', 'e', 'i', 'o', 'u', 'n', 'a',  'e',  'i',  'o',  'u',  'a', 'e', 'i', 'o', 'u', 'a',  'e',  'i',  'o',  'u',  'a',  'e',  'i',  'o',  'u',  'a',  'e',  'i',  'o',  'u',  'n');
   $nombre = str_replace($buscar, $repl, $nombre);
      
    // Añadimos los guiones
   $buscar = array(' ', '&', '\r\n', '\n', '+', '_');
   $nombre = str_replace($buscar, '-', $nombre);
      
   // Eliminamos y Reemplazamos demás caracteres especiales
   $buscar = array('/[^a-z0-9\-<>]/', '/[\-]+/', '/<[^>]*>/');
   $repl = array('.', '-', '.');
   $nombre = preg_replace ($buscar, $repl, $nombre);
   return $nombre;   
}


Todos eses caracteres raros k veis, los saqué de escribir en un editor de textos ó y codificarlo luego en ANSI (ya que como os comentaba, la palabra Nómina por ejemplo, no se me veía así, sino que se veía en lugar de ó un caracter raro). Entonces si tengo un archivo que se llama "Nómina del 2008.doc" me quedaría "n.mina-del-2008.doc"
Como veis no acaba de sustituir bien las tildes. Si alguien pudiera echarme una mano... :oops:
Muchas gracias

Por naiara

25 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Ene 2009 11:06 am
Ya está todo solucionado chicos, utlizo también la función htmlentities y ya está todo arreglado :D

Por naiara

25 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.