Foros del Web » Programando para Internet » PHP »

problema quitando acentos y ñ

Estas en el tema de problema quitando acentos y ñ en el foro de PHP en Foros del Web. Hola, tengo un problema que no logro resolver, he mirado por el foro funciones para quitar acentos pero me devuelven caracteres extraños y no me ...
  #1 (permalink)  
Antiguo 09/02/2009, 12:24
 
Fecha de Ingreso: febrero-2004
Mensajes: 88
Antigüedad: 20 años, 2 meses
Puntos: 5
problema quitando acentos y ñ

Hola, tengo un problema que no logro resolver, he mirado por el foro funciones para quitar acentos pero me devuelven caracteres extraños y no me valen, por lo menos las primeras 200 que he probado. Al grano:

tomo valores de una base de datos y muestro un listado de ellos una página, Algunos llevan tilde, otros son formados por varias palabras etc
necesito que se muestren sin tilde para meterlos en un link pero no lo logro

si escribo:
Código PHP:
$valor=str_replace(" ","-",$row[1]); 
se cambian los spacios en blanco sin problema,
Código PHP:
$valor=str_replace("A","a",$row[1]); 
tambien funciona, pero como hacer para que una í se cambie por una i por que esto no me funciona:
Código PHP:
$valor=str_replace("í","i",$row[1]); 
Gracias anticipadas y un saludo
  #2 (permalink)  
Antiguo 09/02/2009, 12:29
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problema quitando acentos y ñ

para que funcione, la cadena original debe ser compatible

osea... si "no se deja" debes usar utf8_encode/decode para hacer compatible la cadena antes de intentar el cambio

Código PHP:
$valor=str_replace("í","i",utf8_encode($row[1])); // o utf8_decode 
eso se debe a la codificación del propio script (archivo) si esta guardada en ANSI/ISO debes convertirla UTF-8 o al revés, todo se origina desde la fuente de tus datos... y, los caracteres que manualmente usas...

que por cierto.... las funciones que están en el foro son perfectas, suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 09/02/2009, 12:30
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: problema quitando acentos y ñ

Deberias hacer un echo htmlentities($row[1]) para saber exacto que caracteres estas guardando.....

Te recomiendo que tengas las tablas (o al menos los campos de interes) en UFT8 como sistema de codificacion (elegí el ultimo en el PHPMYADMIN de las opcines que te da)
__________________
Salu2!
  #4 (permalink)  
Antiguo 09/02/2009, 13:00
 
Fecha de Ingreso: febrero-2004
Mensajes: 88
Antigüedad: 20 años, 2 meses
Puntos: 5
Respuesta: problema quitando acentos y ñ

con utf8_decode devuelve : Alegr�a
con utf8_encode devuelve : AlegrÃ*a


echo htmlentities($row[1]) devuelve: AlegrÃ*a

Todo esto de Alegría, pero todavia no me tiene contento
Tengo que decir que las tildes en la pagina se muestran perfectamente y la meta de la pagina es
Cita:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
el cotejamiento de la base de datos y la tabla es utf8 general ci
gracias

Última edición por dokoto; 09/02/2009 a las 13:03 Razón: mas datos
  #5 (permalink)  
Antiguo 09/02/2009, 13:41
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: problema quitando acentos y ñ

Me parece que SI te está mostrando en UTF8 porque usa dos caracteres para representar los acentos.

Usa esto luego:

Código PHP:
Function limpiar_clave_mostrar ($clave){        
    
///  vocales  á  é  í  ó  ú  è  =>  ã¡+ã©+ã +ã³+ãº+㨠   y faltaria ç
    
$clave str_ireplace ('ñ','n',$clave); // ñ
    
$clave str_ireplace ('ã±','n',$clave); // ñ  ...        
    
$clave str_ireplace ('ã‘','N',$clave); // Ñ  ...                
    
$clave str_ireplace ('ã¡','a',$clave); // á
    
$clave str_ireplace ('ã©','e',$clave); // é     ...    
    
$clave str_ireplace ('ã³','o',$clave); // ó
    
$clave str_ireplace ('ãº','u',$clave); // ú
    
$clave str_ireplace ('ã¨','e',$clave); // e
    
$clave str_ireplace ('ã'.chr(173),'i',$clave); // í        
    
return $clave;


Edit:
me llamaron......me tuve que ir.....y habia publicado funciones que uso yo......pero que no necesariamente son parte de esta solucion
__________________
Salu2!

Última edición por Italico76; 09/02/2009 a las 15:31
  #6 (permalink)  
Antiguo 09/02/2009, 15:00
Avatar de SCY-FOX  
Fecha de Ingreso: septiembre-2007
Ubicación: Chile
Mensajes: 139
Antigüedad: 16 años, 7 meses
Puntos: 5
Respuesta: problema quitando acentos y ñ

yo usé esta función mucho tiempo hasta que me acostumbré a codificar todo en UTF-8...

Código PHP:
function elimina_acentos($cadena){ // funcion para quitar los acentos de loa stings
$tofind = &#8220;ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ”;
$replac = &#8220;AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn”;
return(strtr($cadena,$tofind,$replac));
}
?> 
  #7 (permalink)  
Antiguo 09/02/2009, 15:33
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: problema quitando acentos y ñ

SCY-FOX: la usas directamente ? usas utf8_encode() o algo primero ? porque yo la visto en PHP.net y asi como está no me funcionó

No me das un ejemplo con un string para ver que toma como entrada ? gracias
__________________
Salu2!
  #8 (permalink)  
Antiguo 10/02/2009, 02:32
 
Fecha de Ingreso: febrero-2004
Mensajes: 88
Antigüedad: 20 años, 2 meses
Puntos: 5
De acuerdo Respuesta: problema quitando acentos y ñ

Hola de nuevo,
Al fin llego a ver alegria u no AlegrÃ*a , y es la siguiente función la que solucionó el asunto.
Paso a minusculas, cambio espacios por - y elimino las tildes y ñ






Código PHP:
function elimina_acentos($cadena){
$tofind "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ";
$replac "aaaaaaaaaaaaooooooooooooeeeeeeeeCciiiiiiiiuuuuuuuuynn-";
return(
strtr($cadena,$tofind,$replac));
}
$valor=elimina_acentos(utf8_decode(strtolower(trim($row[1])))); 
pateketrueke, Italico76, SCY-FOX, muchas gracias por la ayuda
Un saludo
  #9 (permalink)  
Antiguo 10/02/2009, 02:58
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: problema quitando acentos y ñ

Y yo estoy indignado........ por que soy el único al que no le funcionan estas funciones ?

Si les digo las vueltas que doy..... y lo complicado de mi codigo......... me matan!
__________________
Salu2!
  #10 (permalink)  
Antiguo 10/02/2009, 03:28
 
Fecha de Ingreso: febrero-2004
Mensajes: 88
Antigüedad: 20 años, 2 meses
Puntos: 5
Respuesta: problema quitando acentos y ñ

Pues gracias a tu pista del utf8_decode me funciona
Muchas gracias y si quieres plantear tu problema, estos dias tengo el tema fresco. Un saludo
  #11 (permalink)  
Antiguo 10/02/2009, 04:56
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: problema quitando acentos y ñ

Estoy casi solucionando....... y este post me ayudo muuuuucho je

Pasos que seguí:

+ tabla y/o campos en utf8 en la DB
+ cabecera con el meta charset=utf-8
+ NO usar NADA al almacenar (ni utf8_encode ni nada)
+ al leer procesar asi : htmlentities(utf8_decode ($row['clave']));

El no poner htmlentities() o el codificar con utf8_encode() primero me llevaba a callejones sin salida...........

PD: utf8_encode() es posible que no deba utilizarlo los datos vienen via formulario y estan codificados ya en UTF-8
__________________
Salu2!

Última edición por Italico76; 10/02/2009 a las 05:44
  #12 (permalink)  
Antiguo 10/02/2009, 06:27
 
Fecha de Ingreso: febrero-2004
Mensajes: 88
Antigüedad: 20 años, 2 meses
Puntos: 5
Respuesta: problema quitando acentos y ñ

Pues me alegro
saludos
  #13 (permalink)  
Antiguo 11/02/2009, 08:13
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: problema quitando acentos y ñ

Bueno..... me faltaba resolver algo.....y aca el problema no-resuelto: las urls me quedan en un formato unicode "corto" aparentemente equivalente pero NO el que necesito!

http://www.forosdelweb.com/f18/urlen...lentes-671728/

A ver si me ayudan!!!
__________________
Salu2!
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:20.