Foros del Web » Programando para Internet » PHP »

Eliminar acentos antes de guardar en BD

Estas en el tema de Eliminar acentos antes de guardar en BD en el foro de PHP en Foros del Web. Hola como estan, Vereis tengo el siguiente problema, necesitoguardar en la base de datos un seria de palabras que se van introduciendo mediante formularios la ...
  #1 (permalink)  
Antiguo 26/04/2013, 02:38
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Eliminar acentos antes de guardar en BD

Hola como estan,

Vereis tengo el siguiente problema, necesitoguardar en la base de datos un seria de palabras que se van introduciendo mediante formularios la cosa que necesito que se guarden en la base de datos sin acentos,

He buscado en el manual de php y no veo ninguna funcion que tenga esta finalidad a ver si alguien conoce como podria hacerse esto.

Un saludo
  #2 (permalink)  
Antiguo 26/04/2013, 02:54
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años, 1 mes
Puntos: 28
Respuesta: Eliminar acentos antes de guardar en BD

Por ejemplo:

Código PHP:
Ver original
  1. function stripAccents($str) {
  2.     return strtr(utf8_decode($str), utf8_decode('àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ'), 'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
  3. }

También:

$val = iconv('UTF-8','ASCII//TRANSLIT',$val);
  #3 (permalink)  
Antiguo 26/04/2013, 02:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Eliminar acentos antes de guardar en BD

Código PHP:
Ver original
  1. function stripAccents($string){
  2.     return strtr($string,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ',
  3. 'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
  4. }

strtr esto puede servir
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 26/04/2013 a las 02:57 Razón: Menos mal que coincidimos
  #4 (permalink)  
Antiguo 26/04/2013, 03:06
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Eliminar acentos antes de guardar en BD

Hola amigos, muchas gracias por su atencion,

Es lo que busco la cosa es que el string no solo es una palabra puede ser una frase, he probado su funcion y creo que esta fallando por eso por que es una frase.

Se podria modificar para que funcionase de este modo?

Un saludo y nuevo gracias
  #5 (permalink)  
Antiguo 26/04/2013, 03:12
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Eliminar acentos antes de guardar en BD

Podría ser que tengas por ahí algo que convierte los caracteres especiales en sus respectivas entidades html?

Ejemplo: á = á
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 26/04/2013, 03:28
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Eliminar acentos antes de guardar en BD

Hola amigos,

Vereis cuando intento limpiar la cadena "DESTORNILLADORES PAR MÁXIMO"

Me devuelve : "DESTORNILLADORES PAR MYaXIMO"

Esta añadiendo una Y
  #7 (permalink)  
Antiguo 26/04/2013, 03:57
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Eliminar acentos antes de guardar en BD

Hola amigos he encontrado esta funcion que me funciona, la unica cosa es que quiero que me respete las ñ

Código PHP:
Ver original
  1. function elimina_acentos($texto){ //www.webenphp.com    
  2. $texto=utf8_decode($texto);
  3. $con_acento = utf8_decode("ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ");
  4. $sin_acento = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
  5. $texto= strtr($texto, $con_acento, $sin_acento);
  6. $texto = preg_replace("/[^A-Za-z0-9 _]/","",$texto);
  7. //si queremos pasar todos los carácteres a minusculas
  8. $texto = strtolower(trim ($texto));
  9. //si queremos sustituir el espacio en blanco por -
  10. $texto = preg_replace( array("`[^a-z0-9]`i","`[-]+`") , "-", $texto);
  11. return $texto;}


Como podria modificarla para que no cambiase las ñ

Un saludo
  #8 (permalink)  
Antiguo 26/04/2013, 04:01
 
Fecha de Ingreso: marzo-2013
Ubicación: Jaén, Andalucía
Mensajes: 129
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: Eliminar acentos antes de guardar en BD

Cita:
Iniciado por franjgg Ver Mensaje
Hola amigos he encontrado esta funcion que me funciona, la unica cosa es que quiero que me respete las ñ

Código PHP:
Ver original
  1. function elimina_acentos($texto){ //www.webenphp.com    
  2. $texto=utf8_decode($texto);
  3. $con_acento = utf8_decode("ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ");
  4. $sin_acento = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
  5. $texto= strtr($texto, $con_acento, $sin_acento);
  6. $texto = preg_replace("/[^A-Za-z0-9 _]/","",$texto);
  7. //si queremos pasar todos los carácteres a minusculas
  8. $texto = strtolower(trim ($texto));
  9. //si queremos sustituir el espacio en blanco por -
  10. $texto = preg_replace( array("`[^a-z0-9]`i","`[-]+`") , "-", $texto);
  11. return $texto;}


Como podria modificarla para que no cambiase las ñ

Un saludo
...parece ser k ni te has leido la función ....quita los dos últimos caracteres de $con_acento y de $sin_acento....
  #9 (permalink)  
Antiguo 26/04/2013, 04:08
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Eliminar acentos antes de guardar en BD

Buenas que tal,

Es lo primero que hice y el resultado es "MONTAJE MUEBLES AOS"

El correcto seria "MONTAJE MUEBLES AÑOS"

Un saludo
  #10 (permalink)  
Antiguo 26/04/2013, 04:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Eliminar acentos antes de guardar en BD

¿Por que no dejas de lado eso y te concentras a que la base reciba correctamente los acentos, y luego los pueda devolver bien?
¿No sería más práctico?
En este mismo foro ese tema se ha tratado innumerables veces, y siempre se ha llegado a buen puerto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 26/04/2013, 04:36
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Eliminar acentos antes de guardar en BD

Hola gnzsoloyo que tal,

La cosa es que necesito guardar esa informacion sin acentos no es por tema de la base de datos es para tenerlo sin acentos dentro.

Un saludo
  #12 (permalink)  
Antiguo 26/04/2013, 05:52
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Eliminar acentos antes de guardar en BD

He conseguido hacerlo, el unico problema es que me pone la ñ en miscula y no debe mostrarlo en Ñ

Código PHP:
Ver original
  1. function dropAccents($articulo){        
  2.         $tofind = "ÀÁÂÄÅàáâäÒÓÔÖòóôöÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿ";
  3.         $replac = "AAAAAaaaaOOOOooooEEEEeeeeCcIIIIiiiiUUUUuuuuy";
  4.         return utf8_encode(strtr(utf8_decode($articulo), utf8_decode($tofind), $replac));
  5.     }


He probado con strtoupper pero no lo consigo, pone todo en mayusculas menos la ñ
  #13 (permalink)  
Antiguo 26/04/2013, 06:03
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Eliminar acentos antes de guardar en BD

Código PHP:
Ver original
  1. function dropAccents($articulo){        
  2. //Y si reemplazas ñ por ñ y Ñ por Ñ
  3.             $tofind = "ÀÁÂÄÅàáâäÒÓÔÖòóôöÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿñÑ";
  4.             $replac = "AAAAAaaaaOOOOooooEEEEeeeeCcIIIIiiiiUUUUuuuuyñÑ";
  5.             return utf8_encode(strtr(utf8_decode($articulo), utf8_decode($tofind), $replac));
  6.         }

??? La ñ es una n acentuada.... uyyyy lo que he dicho!!!
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #14 (permalink)  
Antiguo 26/04/2013, 06:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Eliminar acentos antes de guardar en BD

Creo que deberías ver este link, donde se trata el tema de un modo interesante:
Php replacing special characters like à-a è-e

En incluso en este encontrarás una solución: PHP::Transliterator::transliterate

Fijate especialmente en el último ejemplo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 26/04/2013, 08:03
Avatar de Rafael
Modegráfico
 
Fecha de Ingreso: marzo-2003
Mensajes: 9.028
Antigüedad: 21 años, 1 mes
Puntos: 1826
Respuesta: Eliminar acentos antes de guardar en BD

Muy interesante.
Unas preguntas.
1) Si ya tengo definida mi función
Código PHP:
Ver original
  1. function elimina_acentos($texto)...

Y tengo varias cadenas dentro de diferentes variables, no sólo dentro de $texto, por ejemplo:
$nombre, $comentarios, $texto ¿Cómo les aplico la función?

2) iconv es una extensión... en teoría ¿los proveedores de hosting instalan este tipo de extensiones siempre?
  #16 (permalink)  
Antiguo 26/04/2013, 16:52
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Eliminar acentos antes de guardar en BD

1)

Código PHP:
Ver original
  1. $var1 = dropAccents($var1);
  2. $var2 = dropAccents($var2);
  3. $varN = dropAccents($varN);

2) Generalmente debería estar instalada, puedes crear una página phpinfo.php con sólo phpinfo(); y ahí verás si está instalada o no.
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: acentos, bd, formulario
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 21:15.