Foros del Web » Programando para Internet » PHP »

Problema con conversion de tildes

Estas en el tema de Problema con conversion de tildes en el foro de PHP en Foros del Web. Hola a todos! Tengo el siguiente problema: Recibo una variable de un campo de texto de un formulario, y quiero antes de meterlo en base ...
  #1 (permalink)  
Antiguo 26/01/2010, 06:27
 
Fecha de Ingreso: septiembre-2007
Mensajes: 106
Antigüedad: 17 años, 2 meses
Puntos: 1
Problema con conversion de tildes

Hola a todos!

Tengo el siguiente problema:

Recibo una variable de un campo de texto de un formulario, y quiero antes de meterlo en base de datos quitarle las tildes, es decir en vez de meter "í" pues grabar "i".

Al principio lo que quería era al contrario, leer de base de datos y quitarle las tildes a lo que leía, pero no me dejaba e imaginé que era algún problema con la base de datos, por eso ahora lo que quiero es quitarlas antes de meterla en base de datos.

He probado las siguientes funciones:
Código PHP:
function urls_amigables($cadena) {
    
$cadena trim($cadena);
    
$cadena strtr($cadena,
"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
"aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");
    
$cadena strtr($cadena,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz");
    
$cadena preg_replace('#([^.a-z0-9]+)#i''-'$cadena);
        
$cadena preg_replace('#-{2,}#','-',$cadena);
        
$cadena preg_replace('#-$#','',$cadena);
        
$cadena preg_replace('#^-#','',$cadena);
    return 
$cadena;


Código PHP:
<?php
function urls_amigables($url) { 

// Tranformamos todo a minusculas 

$url strtolower($url); 

//Rememplazamos caracteres especiales latinos 

$url str_replace ("á""a"$url);
$url str_replace ("é""e"$url);
$url str_replace ("í""i"$url);
$url str_replace ("ó""o"$url);
$url str_replace ("ú""u"$url);
$url str_replace ("ñ""u"$url);

// Añaadimos los guiones 

$find = array(' ''&''\r\n''\n''+'); 
$url2 str_replace ($find'-'$url); 

// Eliminamos y Reemplazamos demás caracteres especiales 

$find = array('/[^a-z0-9\-<>]/''/[\-]+/''/<[^>]*>/'); 

$repl = array('''-'''); 

$url3 preg_replace ($find$repl$url2); 

return 
$url3

}
?>
Pero no me funcionan, la primera lo que hace es cambiarme las tildes y ñ por "-", y la segunda lo que hace es eliminarme directamente la letra que lleve tilde o que sea ñ.

¿Alguien sabe por qué me pasa esto?¿Cómo puedo solucionarlo?

Un saludo y gracias
  #2 (permalink)  
Antiguo 26/01/2010, 06:32
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: Problema con conversion de tildes

$cadena = strtr($cadena,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdef ghijklmnopqrstuvwxyz");
$cadena = preg_replace('#([^.a-z0-9]+)#i', '-', $cadena);

la primera linea te la evitas con strtolower()
la segunda tiene un problema.. deberia ser ([^a-z0-9]+) quitale el punto .. el . es cualquier caracter =)

saludos
__________________
More about me...
~ @rhyudek1
~ Github
  #3 (permalink)  
Antiguo 26/01/2010, 06:44
 
Fecha de Ingreso: septiembre-2007
Mensajes: 106
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Problema con conversion de tildes

He puesto lo que me comentas del punto y sigue igual, ahora en vez de cambiarme la letra que tenga tilde por "-" me lo deja igual, ¿Qué es lo que pasa?

Saludos
  #4 (permalink)  
Antiguo 26/01/2010, 06:58
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: Problema con conversion de tildes

pero cual de las 2 funciones estas utilizando :S?
__________________
More about me...
~ @rhyudek1
~ Github
  #5 (permalink)  
Antiguo 26/01/2010, 07:46
 
Fecha de Ingreso: septiembre-2007
Mensajes: 106
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Problema con conversion de tildes

Ahora mismo la primera, pero si hay que volver a usar la segunda se usa
  #6 (permalink)  
Antiguo 26/01/2010, 08:01
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: Problema con conversion de tildes

bueno yo probe asi y si me funciona bien
Código PHP:
Ver original
  1. function urls_amigables($cadena) {
  2.     $cadena = html_entity_decode(trim($cadena));
  3.     $cadena = strtr($cadena,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");
  4.     $cadena = strtolower($cadena);
  5.     $cadena = preg_replace('#([^a-z0-9]+)#i', '-', $cadena);
  6.     $cadena = preg_replace('#-{2,}#','-',$cadena);
  7.     $cadena = preg_replace('#-$#','',$cadena);
  8.     $cadena = preg_replace('#^-#','',$cadena);
  9.     return $cadena;
  10. }
  11. echo urls_amigables("Probando Función con acéntos y s%&igns");
__________________
More about me...
~ @rhyudek1
~ Github
  #7 (permalink)  
Antiguo 27/01/2010, 07:39
 
Fecha de Ingreso: septiembre-2007
Mensajes: 106
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Problema con conversion de tildes

Que va he probado eso y sigue sin cambiarme bien las tildes, no sé el motivo...

Al final he probado otra cosa y me funciona, no es la mejor solución...pero ya llevo mucho tiempo perdido con esto....

Os lo pongo por si a alguien le sirve:

Código PHP:
<?php
function urls_amigables($url) { 

// Tranformamos todo a minusculas 

$url strtolower($url); 
$url htmlentities($url);
//Rememplazamos caracteres especiales latinos 

$url str_replace ("&aacute;""a"$url);
$url str_replace ("&eacute;""e"$url);
$url str_replace ("&iacute;""i"$url);
$url str_replace ("&oacute;""o"$url);
$url str_replace ("&uacute;""u"$url);
$url str_replace ("&ntilde;""n"$url);

// Añaadimos los guiones 

$find = array(' ''&''\r\n''\n''+'); 
$url2 str_replace ($find'-'$url); 

// Eliminamos y Reemplazamos demás caracteres especiales 

$find = array('/[^a-z0-9\-<>]/''/[\-]+/''/<[^>]*>/'); 

$repl = array('''-'''); 

$url3 preg_replace ($find$repl$url2); 

return 
$url3

}
?>
Muchas gracias por las respuestas. Un saludo

Etiquetas: conversion, tildes
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 12:37.