Foros del Web » Programando para Internet » PHP »

Problemas con strtr

Estas en el tema de Problemas con strtr en el foro de PHP en Foros del Web. Hola a todos! Acudo a vosotros porque tengo un problema que no soy capaz de resolver por más vueltas que le doy... Se trata que ...
  #1 (permalink)  
Antiguo 18/05/2007, 13:05
 
Fecha de Ingreso: mayo-2007
Mensajes: 4
Antigüedad: 17 años
Puntos: 0
Problemas con strtr

Hola a todos!

Acudo a vosotros porque tengo un problema que no soy capaz de resolver por más vueltas que le doy...

Se trata que quiero usar el título de unos archivos como parte de las URLs que llevan a las páginas de los archivos, y para esto también uso .htaccess, pero el problema es este, pongo el código de la función que me produce el problema:

Código PHP:
function get_image_url($image_id)
{
    global 
$site_db;
    
$sql "SELECT cat_id,image_name FROM ".IMAGES_TABLE." WHERE image_id = '".$image_id."'";
    
$result $site_db->query($sql);
    
$row $site_db->fetch_array($result);

    
$row['image_name'] = str_replace('!'','$row['image_name']);

    
$row['image_name'] = strtr($row['image_name'], "ABCDEFGHIJKLMNÑOPQRSTUVWXYZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðòóôõöøùúûüýýþÿñ""abcdefghijklXnñopqrstuvwxyzaaaaaaaceeeeiiiidoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuuyybyn");

    return 
'-'.str_replace('+','-',urlencode($row['image_name'])).'-'.$image_id;

Uso esto para obtener el nombre del archivo y usarlo en la URL, y con strtr hago que desaparezcan los acentos... pero no funciona!



Me cambia las mayúsculas a minúsculas, o sea, que en principio parece que funciona, pero con los acentos y eso me da problemas...

Ejemplo:

Si el nombre del archivo es Efectos mágicos cuando obtengo la URL sería así:

/efectos-mn%A1gicos.htm

Lo dicho, la mayúscula (la E) se ha convertido en minúscula, pero el acento (á) no se ha convertdio en una a.

La URL funciona (es decir, que si le doy click me lleva a la página que se supone), así que todo lo demás creo que lo tengo bien, incluyendo el .htaccess, el problema creo que otro...



¿Alguien me ayuda? GRACIAS!

un abrazo!

Última edición por narunet; 20/05/2007 a las 20:48
  #2 (permalink)  
Antiguo 19/05/2007, 18:40
 
Fecha de Ingreso: mayo-2007
Mensajes: 4
Antigüedad: 17 años
Puntos: 0
Re: Problemas con strtr

hola? hay alguien ahí?
  #3 (permalink)  
Antiguo 19/05/2007, 18:49
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Re: Problemas con strtr

si stoi yo,, pero no termino de comprender xDD

si lo qe dices es qe no te convierte los simbolos raros a la letra "normal" correspondiente, prueba primero hacerlo con variables y no modificando el valor de $row

algo asi:
Código PHP:
function get_image_url($image_id)
{
    global 
$site_db;
    
$sql "SELECT cat_id,image_name FROM ".IMAGES_TABLE." WHERE image_id = '".$image_id."'";
    
$result $site_db->query($sql);
    
$row $site_db->fetch_array($result);

    
$res str_replace('!'','$row['image_name']);

    
$res strtr($res"ABCDEFGHIJKLMNÑOPQRSTUVWXYZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðòóôõöøùúûüýýþÿñ""abcdefghijklXnñopqrstuvwxyzaaaaaaaceeeeiiiidoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuuyybyn");

    return 
'-'.str_replace('+','-',urlencode($res)).'-'.$image_id;

espero qe te sirva ^^
exitos
  #4 (permalink)  
Antiguo 20/05/2007, 20:47
 
Fecha de Ingreso: mayo-2007
Mensajes: 4
Antigüedad: 17 años
Puntos: 0
Re: Problemas con strtr

¡Hola geq! ¡MUCHAS GRACIAS POR RESPONDER!

Bueno, lo que me has propuesto ya la había probado, pero tampoco funcionó...

He estado dándole muchas vueltas al tema y creo que todo se debe al urlencode, así que al final lo he intentado solucionar de otra manera. He creado esta función:

Código PHP:
function get_clean_words($clean_word '') {

$clean_word strtolower($clean_word);

$clean_word str_replace('á''a'$clean_word);
$clean_word str_replace('à''a'$clean_word);
$clean_word str_replace('é''e'$clean_word);
$clean_word str_replace('è''e'$clean_word);
$clean_word str_replace('í''i'$clean_word);
$clean_word str_replace('ì''i'$clean_word);
$clean_word str_replace('ó''o'$clean_word);
$clean_word str_replace('ò''o'$clean_word);
$clean_word str_replace('ú''u'$clean_word);
$clean_word str_replace('ù''u'$clean_word);
$clean_word str_replace('ü''u'$clean_word);
$clean_word str_replace('ñ''n'$clean_word);
$clean_word str_replace('ç''c'$clean_word);
$clean_word str_replace('@''A'$clean_word);
$clean_word str_replace('€''E'$clean_word);
$clean_word str_replace('$''S'$clean_word);
$clean_word str_replace('&''n'$clean_word);
$clean_word str_replace('_''-'$clean_word);
$clean_word str_replace('¡'''$clean_word);
$clean_word str_replace('!'''$clean_word);
$clean_word str_replace('¿'''$clean_word);
$clean_word str_replace('?'''$clean_word);
$clean_word str_replace('%'''$clean_word);
$clean_word str_replace('/'''$clean_word);
$clean_word str_replace('('''$clean_word);
$clean_word str_replace(')'''$clean_word);
$clean_word str_replace('='''$clean_word);
$clean_word str_replace('*'''$clean_word);
$clean_word str_replace(','''$clean_word);
$clean_word str_replace('.'''$clean_word);
$clean_word str_replace(';'''$clean_word);
$clean_word str_replace(':'''$clean_word);
$clean_word str_replace('º'''$clean_word);
$clean_word str_replace('ª'''$clean_word);

return 
$clean_word;


Así que ahora cuando quiero "limpiar" algo lo paso por la función y ya está:

Código PHP:
$image_name get_clean_words($row['image_name']); 
Funciona bien, pero tengo una duda de principiante (que es lo que soy): ¿cómo puedo simplificar el código? Es decir, ¿puedo resumir todas esas líneas en una sóla o da igual que lo deje así?

¡GRACIAS!
  #5 (permalink)  
Antiguo 20/05/2007, 20:53
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Re: Problemas con strtr

bien,, si en verdad necesitas simplificarlo x(

haz esto: crea dos arreglos, uno ($find por ejemplo) con todo lo qe qieras reemplazar y el otro ($replace) con cada cadena qe lo va a reemplazar, en el mismo orden, es decir, el primer elemento de uno se reemplazara por el primero del otro, el segundo por el segundo, y asi hasta el final

luego llamas una vez a la funcion str_replace() con los arreglos en lugar de las cadenas y listo:

Código PHP:
$clean_word str_replace($find$replace$clean_word); 
exitos!
  #6 (permalink)  
Antiguo 20/05/2007, 20:58
 
Fecha de Ingreso: mayo-2007
Mensajes: 18
Antigüedad: 17 años
Puntos: 0
Re: Problemas con strtr

Hola tengo curiosidad...te funciono ???
Saludos
  #7 (permalink)  
Antiguo 21/05/2007, 13:34
 
Fecha de Ingreso: mayo-2007
Mensajes: 4
Antigüedad: 17 años
Puntos: 0
Re: Problemas con strtr

Cita:
Iniciado por geq Ver Mensaje
bien,, si en verdad necesitas simplificarlo x(

haz esto: crea dos arreglos, uno ($find por ejemplo) con todo lo qe qieras reemplazar y el otro ($replace) con cada cadena qe lo va a reemplazar, en el mismo orden, es decir, el primer elemento de uno se reemplazara por el primero del otro, el segundo por el segundo, y asi hasta el final

luego llamas una vez a la funcion str_replace() con los arreglos en lugar de las cadenas y listo:

Código PHP:
$clean_word str_replace($find$replace$clean_word); 
exitos!
Vaya, no sé cómo no se me había ocurrido... ¡qué fácil parece cuando sabes la respuesta!

¡GRACIAS! ¡UN MILLON DE GRACIAS!

Y a jancarlo777, sí, funciona perfectamente todo...

¡Un abrazo y muchas gracias!
  #8 (permalink)  
Antiguo 21/05/2007, 16:21
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Re: Problemas con strtr

bueno me alegro x)
un placer
cualqier cosa ya sabes dnde encontrarme xD

exitos
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 04:50.