Foros del Web » Programando para Internet » PHP »

Problema quitando acentos

Estas en el tema de Problema quitando acentos en el foro de PHP en Foros del Web. Buenas... Llevo casi toda la mañana con esta tonteria que en teoria es sencillo de hacer...Primero intente hacer una yo @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código php: Ver ...
  #1 (permalink)  
Antiguo 01/10/2009, 04:37
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 2 meses
Puntos: 5
Problema quitando acentos

Buenas...

Llevo casi toda la mañana con esta tonteria que en teoria es sencillo de hacer...Primero intente hacer una yo

Código php:
Ver original
  1. function elimina_acentos($cadena) {
  2.     $acentos = array("À", "Á", "Â", "Ã", "Ä", "Å", "à", "á", "â", "ã", "ä", "å", "Ò", "Ó", "Ô", "Õ", "Ö", "Ø", "ò", "ó", "ô", "õ", "ö", "ø", "È", "É", "Ê", "Ë", "è", "é", "ê", "ë", "Ç", "ç", "Ì", "Í", "Î", "Ï", "ì", "í", "î", "ï", "Ù", "Ú", "Û", "Ü", "ù", "ú", "û", "ü", "ÿ", "Ñ", "ñ");
  3.     $quitar = array("A", "A", "A", "A", "A", "A", "a", "a", "a", "a", "a", "a", "O", "O", "O", "O", "O", "O", "o", "o", "o", "o", "o", "o", "E", "E", "E", "E", "e", "e", "e", "e", "C", "c", "I", "I", "I", "I", "i", "i", "i", "i", "U", "U", "U", "U", "u", "u", "u", "u", "y", "N", "n");
  4.     return(strtr($cadena, $acentos, $quitar));
  5. }

Pero no funcionaba, dejaba la palabra tal cual con el acento asi que supuse que lo habia hecho mal y busque alguna funcion hecha por internet llegando a esta:

Código php:
Ver original
  1. function quitarAcentos($text)
  2.     {
  3.         $text = htmlentities($text, ENT_QUOTES, 'UTF-8');
  4.         $text = strtolower($text);
  5.         $patron = array (
  6.             // Espacios, puntos y comas por guion
  7.             '/[\., ]+/' => '-',
  8.            
  9.             // Vocales
  10.             '/à/' => 'a',
  11.             '/è/' => 'e',
  12.             '/ì/' => 'i',
  13.             '/ò/' => 'o',
  14.             '/ù/' => 'u',
  15.            
  16.             '/á/' => 'a',
  17.             '/é/' => 'e',
  18.             '/í/' => 'i',
  19.             '/ó/' => 'o',
  20.             '/ú/' => 'u',
  21.            
  22.             '/â/' => 'a',
  23.             '/ê/' => 'e',
  24.             '/î/' => 'i',
  25.             '/ô/' => 'o',
  26.             '/û/' => 'u',
  27.            
  28.             '/ã/' => 'a',
  29.             '/&etilde;/' => 'e',
  30.             '/ĩ/' => 'i',
  31.             '/õ/' => 'o',
  32.             '/ũ/' => 'u',
  33.            
  34.             '/ä/' => 'a',
  35.             '/ë/' => 'e',
  36.             '/ï/' => 'i',
  37.             '/ö/' => 'o',
  38.             '/ü/' => 'u',
  39.            
  40.             '/ä/' => 'a',
  41.             '/ë/' => 'e',
  42.             '/ï/' => 'i',
  43.             '/ö/' => 'o',
  44.             '/ü/' => 'u',
  45.            
  46.             // Otras letras y caracteres especiales
  47.             '/å/' => 'a',
  48.             '/ñ/' => 'n',
  49.  
  50.             // Agregar aqui mas caracteres si es necesario
  51.  
  52.         );
  53.        
  54.         $text = preg_replace(array_keys($patron),array_values($patron),$text);
  55.         return $text;
  56.     }

Aqui pasaba algo bastante raro y es que, en vez de sustituir la vocal con acento por una sin acento, ponia "anónimo" asi que nada, despues de probar 1 o 2 cosas, me pongo a buscar otro:

Código php:
Ver original
  1. function convert_to_alias($string) {
  2.     utf8_encode($string);
  3.     $a = array("á","é","í","oacute","ú","à","è","ì","ò","ù","ä","ë","ï","ö","ü","â","ê","î","ô","û","ñ","ç"," ", "/", "[", "\\", ".", ",", "]", "+", "/");
  4.     $b = array("a","e","i","o","u","a","e","i","o","u","a","e","i","o","u","a","e","i","o","u","n","c","-", "-", "-", "-", "-", "-", "-", "-", "-");
  5.     $string = str_replace($a, $b, $string);
  6.     $string = strtolower($string);
  7.     $string = ereg_replace("[^A-Za-z0-9-]", "", $string);
  8.     return $string;
  9. }

Y en este algo parecido a lo de arriba, en vez de poner "anonimo" pone "anoacutenimo" y ya estoy totalmente perdido, 3 cosas distintas que no funcionan, imagino que me falta poner algo o que, por que ya no se que hacer.

Creo que me falta lo de utf-8 o alguna cosa asi? En fin, si alguien puede ayudarme...

EDIT: Por cierto, necesito quitar los acentos porque estoy creando directorios desde PHP a un FTP y los acentos, obviamente sobran para que funcionen bien las URL

Última edición por Vendetta; 01/10/2009 a las 05:01
  #2 (permalink)  
Antiguo 01/10/2009, 05:41
Avatar de Tokkara  
Fecha de Ingreso: junio-2008
Mensajes: 131
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Problema quitando acentos

La primera función tuya está mal hecha

es Así:
Código php:
Ver original
  1. function elimina_acentos($cadena)
  2. {
  3.           $acentos = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
  4.           $quitar = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
  5.           return(strtr($cadena, $acentos, $quitar));
  6.  }
strtr

o otra forma parecida:
Código php:
Ver original
  1. function elimina_acentos($cadena) {
  2.     $acentos = array("À", "Á", "Â", "Ã", "Ä", "Å", "à", "á", "â", "ã", "ä", "å", "Ò", "Ó", "Ô", "Õ", "Ö", "Ø", "ò", "ó", "ô", "õ", "ö", "ø", "È", "É", "Ê", "Ë", "è", "é", "ê", "ë", "Ç", "ç", "Ì", "Í", "Î", "Ï", "ì", "í", "î", "ï", "Ù", "Ú", "Û", "Ü", "ù", "ú", "û", "ü", "ÿ", "Ñ", "ñ");
  3.     $quitar = array("A", "A", "A", "A", "A", "A", "a", "a", "a", "a", "a", "a", "O", "O", "O", "O", "O", "O", "o", "o", "o", "o", "o", "o", "E", "E", "E", "E", "e", "e", "e", "e", "C", "c", "I", "I", "I", "I", "i", "i", "i", "i", "U", "U", "U", "U", "u", "u", "u", "u", "y", "N", "n");
  4.     return(str_replace($cadena, $acentos, $quitar));
  5. }
str_rpleace

Yo te recomiendo la primera opción. Es más rápida.

en cuanto a las otras 2 funciones que tienes. La primera sirve para pasar caractéres especiales, como por ejemplo &, ", ó..., a caractéres HTML: &, " ó. Esa función viene bien si la cadena que vas a introducir luego la usas en el código HTML. La otra función limpia cualquier cadena de caractéres especiales, como acentos, puntos, interrogaciones, espacios etc...
__________________
Revolucionario controlador de plantillas para php
www.simphple.com
  #3 (permalink)  
Antiguo 01/10/2009, 05:54
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Problema quitando acentos

Nada...Sigue sin funcionar. La primera función añade el acento igual...Aunque la carpeta la llama "Anónimo" imagino que sera porque el FTP no soporta acentos o que se yo.

La segunda funcion, en vez de escribir "Anonimo" escribe "Array".

Asi que sigo en las mismas...No encuentro la forma x.x Por si lo hago mal, pongo la linea en la que uso la funcion pero bueno, no creo que sea eso

Código php:
Ver original
  1. $folder  = elimina_acentos($_SESSION['s_username']);

EDIT: Eres el admin de PiratasOp? Entro ahi cada semana xD
  #4 (permalink)  
Antiguo 01/10/2009, 14:29
Avatar de xempro  
Fecha de Ingreso: marzo-2007
Ubicación: Chile
Mensajes: 222
Antigüedad: 17 años, 1 mes
Puntos: 6
Respuesta: Problema quitando acentos

Funciona perfecta% la primera función expuesta por Tokkara.

Ejemplo de uso...

Código PHP:
<?php
function elimina_acentos($cadena
{
          
$acentos "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
          
$quitar "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
          return(
strtr($cadena$acentos$quitar));
 }
echo 
elimina_acentos("anónimo");
?>
Resultado = anonimo


saludos.-
  #5 (permalink)  
Antiguo 01/10/2009, 14:50
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Problema quitando acentos

Vale!

Ya he visto...La funcion asi "elimina_acentos("anónimo");" funciona perfectamente pero cuando le paso la variable "$_SESSION['s_username']" no quita el acento, pone Anónimo igualmente.

Conclusion, más perdido aun que antes -.- He probado poniendo esto:

Código php:
Ver original
  1. $nick = $_SESSION['s_username'];
  2. echo elimina_acentos($nick);

pero sigue poniendo Anónimo en vez de anonimo =\ ya no se que hacer, si pongo variable no funciona x.x
  #6 (permalink)  
Antiguo 01/10/2009, 15:59
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
Puntos: 1517
Respuesta: Problema quitando acentos

Dale un var_dump a $_SESSION["s_username"]. A ver que te trae
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 01/10/2009, 16:05
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Problema quitando acentos

He puesto eso y me sale "string(14) "Anónimo"" ._. puede ser que no funcione por el "string(14)"? Si hago un echo $_SESSION['s_username']; imprime Anónimo, asi que no creo que haya problema en esto no? Estoy hecho un lio xD

Última edición por Vendetta; 01/10/2009 a las 16:15
  #8 (permalink)  
Antiguo 01/10/2009, 16:24
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
Puntos: 1517
Respuesta: Problema quitando acentos

Haz un archivo nuevo y coloca esto solamente. Cuando lo hagas dime si te sale o no
Código PHP:
Ver original
  1. <?php
  2. $_SESSION["s_username"] = "Anónimo";
  3. echo $_SESSION["s_username"]."<br />";
  4. function elimina_acentos($cadena)
  5. {
  6.           $acentos = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
  7.           $quitar = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
  8.           return(strtr($cadena, $acentos, $quitar));
  9.  }
  10. echo elimina_acentos($_SESSION["s_username"]);
Si no te sale entonces hay que ver si tienes activado register_globals en tu php.ini o alguna otra cosa.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 01/10/2009, 16:34
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Problema quitando acentos

Vale, ahora si funciona pero el problema es que le estas dando un valor fijo y esa variable cambia dependiendo de si estas conectado o no, si no estas conectado eres Anónimo, si estas conectado serias abimaelrc, si dejo el codigo asi como esta, siempre voy a ser Anónimo.

No hay alguna solución? Y yo que creia que esto era sencillo...xD
  #10 (permalink)  
Antiguo 01/10/2009, 19:29
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
Puntos: 1517
Respuesta: Problema quitando acentos

Usa el mismo ejemplo con el valor como lo sacas, pero hazlo en la pagina que te indique, trata solamente un ejemplo sencillo de conectarse a la base de datos o lo que hayas hecho.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #11 (permalink)  
Antiguo 02/10/2009, 03:39
Avatar de Tokkara  
Fecha de Ingreso: junio-2008
Mensajes: 131
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Problema quitando acentos

Cita:
Iniciado por Vendetta Ver Mensaje
La segunda funcion, en vez de escribir "Anonimo" escribe "Array".
Ok, aquí fue culpa mía, copie y pegue la función y cambié el nombre de la función, sin tener en cuenta los parametros.

En la linea 4 de la segunda función que te dí es de la siguiente forma
Código php:
Ver original
  1. return(str_replace($acentos, $quitar, $cadena));
me equivoqué en el orden de los parametros. Prueba así.

Creo que tu problema puede ser de codificacíon. ¿Usas utf8 o ISO? Si el valor de la $_SESSION["username"] es UTF8, esa función quizás no sea válida.

Prueba está otra función
Código PHP:
Ver original
  1. function elimina_acentos($cadena)
  2. {
  3.           $acentos = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
  4.           $quitar = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
  5.           $cadena = utf8_decode($cadena);
  6.           return(utf8_encode(strtr($cadena, $acentos, $quitar)));
  7.  }
  8. echo elimina_acentos($_SESSION["s_username"]);

Otra forma es usando la función iconv. El problema de esta función es que no pertenece al nucleo de PHP, por lo tanto quizas no esté instalada en tu servidor, o el sistema operativo no es compatible con la función. Si es así pidele al dueño de este que te la instale.

Código php:
Ver original
  1. //la cadena debe venir en UTF-8
  2. function eliminar_acentos($cadena)
  3. {
  4.    return iconv("UTF-8", "ISO-8859-1//TRANSLIT", $cadena);
  5. }

Cita:
Iniciado por Vendetta Ver Mensaje
EDIT: Eres el admin de PiratasOp? Entro ahi cada semana xD
Si, lo soy XD. Me alegro que entres cada semana.
__________________
Revolucionario controlador de plantillas para php
www.simphple.com
  #12 (permalink)  
Antiguo 02/10/2009, 16:19
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Problema quitando acentos

Nada...La primera funcion imprime an?o y la segunda solo An ._. Le comente este problema al admin del host y lo miro un rato porque tenia que irse y tampoco vio que pasaba, dijo que continuaria hoy pero dah, no se que puede pasar, hasta donde se, quitar acentos no es tan dificil :S
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 08:34.