Foros del Web » Programando para Internet » PHP »

quitar acentos en cadena sacada de una base de datos

Estas en el tema de quitar acentos en cadena sacada de una base de datos en el foro de PHP en Foros del Web. hola chicos, tengo un pequeño problema, estoy intentando sacar los datos de un campo VARCHAR con mysql, pasarlos por php para quitar los acentos y ...
  #1 (permalink)  
Antiguo 28/04/2012, 03:12
 
Fecha de Ingreso: julio-2008
Mensajes: 24
Antigüedad: 15 años, 8 meses
Puntos: 3
Pregunta quitar acentos en cadena sacada de una base de datos

hola chicos, tengo un pequeño problema, estoy intentando sacar los datos de un campo VARCHAR con mysql, pasarlos por php para quitar los acentos y luego volver a meterlos en la base de datos.
bueno os dejo el código

Código PHP:
include_once('conn.php');


 function 
sinacentos($string)
{
 
    
$string trim($string);
 
    
$string str_replace(
        array(
'á''à''ä''â''ª''Á''À''Â''Ä'),
        array(
'a''a''a''a''a''A''A''A''A'),
        
$string
    
);
 
    
$string str_replace(
        array(
'é''è''ë''ê''É''È''Ê''Ë'),
        array(
'e''e''e''e''E''E''E''E'),
        
$string
    
);
 
    
$string str_replace(
        array(
'í''ì''ï''î''Í''Ì''Ï''Î'),
        array(
'i''i''i''i''I''I''I''I'),
        
$string
    
);
 
    
$string str_replace(
        array(
'ó''ò''ö''ô''Ó''Ò''Ö''Ô'),
        array(
'o''o''o''o''O''O''O''O'),
        
$string
    
);
 
    
$string str_replace(
        array(
'ú''ù''ü''û''Ú''Ù''Û''Ü'),
        array(
'u''u''u''u''U''U''U''U'),
        
$string
    
);
 
    
$string str_replace(
        array(
'ñ''Ñ''ç''Ç'),
        array(
'n''N''c''C',),
        
$string
    
);
 
    
//Esta parte se encarga de eliminar cualquier caracter extraño
 
 
    
return $string;
}

        


$consulta "SELECT id,  alias FROM MiTabla where id between 1 and 15";
$result $dbh->query($consulta);





 foreach (
$result as $row) {
      
      
      
      
$id=$row['id'];
      
$alias=sinacentos($row['alias']);
      

    
      
        
$sql "UPDATE MiTabla
            SET alias=?
            WHERE id=?"
;
$q $dbh->prepare($sql);
$q->execute(array($alias,$id));
      
      

            
            
}
  
  
$dbh NULL
el problema está en que no se me quitan los acentos todo queda igual.
por ejemplo un campo alias tiene la valor "y-al-tercer-año-resucitó" y despues de pasarla por el script queda igual. a ver porfavor si alhuien me puede ayudar con esto.
  #2 (permalink)  
Antiguo 28/04/2012, 03:35
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 7 meses
Puntos: 66
Respuesta: quitar acentos en cadena sacada de una base de datos

Pues yo he probado esto y funciona:

Código PHP:
$string "y al tercer año resucitó";
$string str_replace(
        array(
'ñ''Ñ''ç''Ç'),
        array(
'n''N''c''C',),
        
$string
    
);
$string str_replace(
        array(
'ó''ò''ö''ô''Ó''Ò''Ö''Ô'),
        array(
'o''o''o''o''O''O''O''O'),
        
$string
    
);
echo 
$string
Deberías decodificar la cadena pues es posible que en la bd la tengas codificada con utf-8 etc.

saludos,
__________________
Tu álbum de cromos online!!
  #3 (permalink)  
Antiguo 28/04/2012, 03:40
 
Fecha de Ingreso: julio-2008
Mensajes: 24
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: quitar acentos en cadena sacada de una base de datos

yo también lo he probado así como tú y me funciona, pero no funciona con los datos sacados de la base de datos, por eso he puesto lo del campo VARCHAR
a ver si hay algún truco ahí.
la función quitar acentos está bien, creo que lo que pasa es que no identifica los datos del campo alias como string o alguna cosa como esta
  #4 (permalink)  
Antiguo 28/04/2012, 03:54
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 7 meses
Puntos: 66
Respuesta: quitar acentos en cadena sacada de una base de datos

Cita:
Iniciado por terrakio Ver Mensaje
yo también lo he probado así como tú y me funciona, pero no funciona con los datos sacados de la base de datos, por eso he puesto lo del campo VARCHAR
a ver si hay algún truco ahí.
la función quitar acentos está bien, creo que lo que pasa es que no identifica los datos del campo alias como string o alguna cosa como esta
Seguro que tienes los datos codificados en la bd, por eso no los cambia y los vuelve a insertar tal cual.

si Niños esta codificado, recuperarías esto de la bd Niños y deberías decodificarlo con utf8_decode("Niños");
__________________
Tu álbum de cromos online!!
  #5 (permalink)  
Antiguo 28/04/2012, 03:59
 
Fecha de Ingreso: julio-2008
Mensajes: 24
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: quitar acentos en cadena sacada de una base de datos

tienes razón, la bd con la collation utf8_general_ci pero cuando uso el utf8_decode me devuelve los caracteres con acentos como signo de interrogación ?.
por ejemplo año me lo devuelve a?o
  #6 (permalink)  
Antiguo 28/04/2012, 04:37
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 7 meses
Puntos: 66
Respuesta: quitar acentos en cadena sacada de una base de datos

Si en la bd (año asó) están codificados en utf8 estarían como (año asó)

si pasamos esa cadena directamente por la función sinacentos(año asó) nos devuelve: año asó


si pasamos esa cadena por la función sinacentos(utf8_decode(año asó)) nos devuelve: ano aso

Lo he probado en mi bd con un registro codificado en utf-8

infórmate sobre la codificación exacta de tus registros.
__________________
Tu álbum de cromos online!!
  #7 (permalink)  
Antiguo 28/04/2012, 15:14
 
Fecha de Ingreso: julio-2008
Mensajes: 24
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: quitar acentos en cadena sacada de una base de datos

gracias tío por la ayuda, ya está solucionado con utf8_encode y así ha quedado
Código PHP:
include_once('conn.php'); 
 
 
 function 
sinacentos($string

  
    
$string trim($string); 
  
    
$string str_replace
        array(
'á''à''ä''â''ª''Á''À''Â''Ä'), 
        array(
'a''a''a''a''a''A''A''A''A'), 
        
$string 
    
); 
  
    
$string str_replace
        array(
'é''è''ë''ê''É''È''Ê''Ë'), 
        array(
'e''e''e''e''E''E''E''E'), 
        
$string 
    
); 
  
    
$string str_replace
        array(
'í''ì''ï''î''Í''Ì''Ï''Î'), 
        array(
'i''i''i''i''I''I''I''I'), 
        
$string 
    
); 
  
    
$string str_replace
        array(
'ó''ò''ö''ô''Ó''Ò''Ö''Ô'), 
        array(
'o''o''o''o''O''O''O''O'), 
        
$string 
    
); 
  
    
$string str_replace
        array(
'ú''ù''ü''û''Ú''Ù''Û''Ü'), 
        array(
'u''u''u''u''U''U''U''U'), 
        
$string 
    
); 
  
    
$string str_replace
        array(
'ñ''Ñ''ç''Ç'), 
        array(
'n''N''c''C',), 
        
$string 
    
); 
  
    
//Esta parte se encarga de eliminar cualquier caracter extraño 
  
  
    
return $string

 
         
 
 
$consulta "SELECT id,  alias FROM MiTabla where id between 1 and 15"
$result $dbh->query($consulta); 
 
 
 
 
 
 foreach (
$result as $row) { 
       
       
       
      
$id=$row['id']; 
      
$alias=sinacentos(utf8_encode($row['alias'])); 
       
 
     
       
        
$sql "UPDATE MiTabla 
            SET alias=? 
            WHERE id=?"

$q $dbh->prepare($sql); 
$q->execute(array($alias,$id)); 
  #8 (permalink)  
Antiguo 09/08/2012, 21:40
Avatar de evairdesign  
Fecha de Ingreso: abril-2012
Mensajes: 54
Antigüedad: 11 años, 11 meses
Puntos: 7
Respuesta: quitar acentos en cadena sacada de una base de datos

Muchas Gracias, me sirvio bastante su ayuda :D buena solución y gracias por compartirla :)
__________________
Todo debe hacerse lo más simple posible pero no más simple

Etiquetas: acentos, mysql, sql, tabla, cadenas
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 12:10.