Foros del Web » Programando para Internet » PHP »

Procesar cadena de caracteres

Estas en el tema de Procesar cadena de caracteres en el foro de PHP en Foros del Web. Hola, pues bien, resulta que tengo una funcin que recibe una cadena y debera transformarla en algo de este tipo mas o menos: Si recibo ...
  #1 (permalink)  
Antiguo 10/08/2006, 14:58
Avatar de KarenFerreira  
Fecha de Ingreso: abril-2005
Ubicacin: Bucaramanga, Colombia
Mensajes: 87
Antigedad: 12 aos, 8 meses
Puntos: 2
Pregunta Procesar cadena de caracteres

Hola, pues bien, resulta que tengo una funcin que recibe una cadena y debera transformarla en algo de este tipo mas o menos:

Si recibo "pensin"
debera quedar: "p[eE]ns"[iI][oO]n",

esto con el fin de enviarla a una consulta postgre sql y hacer una comparacion con "similar to", el caso es que no esta haciendo lo que debera porque cuando le digo pensin y muestro la variable para ver si la recibi bien, efectivamente me muestra

"pensin"

pero cuando empiezo a separar la cadena caracter por caracter para reemplazarlos por las cadenas correspondientes a las vocales, entonces me sale

"p e n s i ? ? n"

y cuando vuelve a unir mi cadena y le digo que la muestre en pantalla para saber como se ve, entonces me muestra

"p[e����E����]ns[i����I����]n"

lo cual es extrao porque aparte de no modificarme la o, la toma como dos caracteres por separado y los caracteres que vienen tildados de diferentes formas dentro de mis cadenas de reemplazo, se cambian por interrogantes. La funcin que estoy utilizando es la siguiente:

Cdigo PHP:

function tildes($varparam)
{
    
$res "";
    for(
$i=0$i<strlen($varparam); $i++)
    {
        
$cur substr($varparam$i1);
        if(
$cur=="e"||$cur==""||$cur==""||$cur==""||$cur==""||$cur=="E"||$cur==""||$cur==""||$cur==""||$cur=="")
          
$res $res."[eE]";
        else
        if (
$cur=="a"||$cur==""||$cur==""||$cur==""||$cur==""||$cur=="A"||$cur==""||$cur==""||$cur==""||$cur=="")
            
$res $res."[aA]";
        else
        if (
$cur=="i"||$cur==""||$cur==""||$cur==""||$cur==""||$cur=="I"||$cur==""||$cur==""||$cur==""||$cur=="")
            
$res $res."[iI]";
        else
        if (
$cur=="o"||$cur=="&oacute;"||$cur==""||$cur==""||$cur==""||$cur=="O"||$cur==""||$cur==""||$cur==""||$cur=="")
            
$res $res."[oO]";
        else
        if (
$cur=="u"||$cur==""||$cur==""||$cur==""||$cur==""||$cur=="U"||$cur==""||$cur==""||$cur==""||$cur=="")
            
$res $res."[uU]";
        else
        if (
$cur=="c"||$cur==""||$cur=="C"||$cur=="")
            
$res $res."[cC]";
        else
            
$res $res.$cur;
    }

    return 
$res;

no tengo ni la ms mnima idea de a que cosa puedo atribuirle ese cambio tan extrao, alguien tiene alguna idea de eso?
__________________
'Esto va a salir mal de todos modos, asi que no vale la pena estresarse por eso.' Tony Kakko.
  #2 (permalink)  
Antiguo 10/08/2006, 16:12
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicacin: Estado de Mxico
Mensajes: 503
Antigedad: 14 aos
Puntos: 4
bueno pues lo que ahorita se me ocurre es que utilices la funcin str_replace de esta manera para no tener que hacer todo este cdigo:

<?php
$pajar = 'lo que t quieras';
$aguja = array ('a', 'e', 'i', 'o', 'u');
$nuevaaguja = array ('[aA]', '[eE]', '[iI]', '[oO]', '[uU]' );
echo str_replace ( $aguja, $nuevaaguja, $pajar );
?>

a me falto la letra 'c' slo agregala a los array aguja y nuevaaguja. Espero te sirva de algo.
  #3 (permalink)  
Antiguo 10/08/2006, 16:49
foo
 
Fecha de Ingreso: febrero-2006
Mensajes: 278
Antigedad: 11 aos, 10 meses
Puntos: 0
Cita:
Iniciado por KarenFerreira Ver Mensaje
Hola, pues bien, resulta que tengo una funcin que recibe una cadena y debera transformarla en algo de este tipo mas o menos:

Si recibo "pensin"
debera quedar: "p[eE]ns"[iI][oO]n",
que intentas hacer con eso? si lo que quieres hacer es comparar textos sin importar las tildes, puedes usar la funcion to_ascii para eso.
Cdigo:
SELECT * FROM tabla WHERE to_ascii(campo) = to_ascii('pensin');
Cita:
Iniciado por KarenFerreira Ver Mensaje
esto con el fin de enviarla a una consulta postgre sql y hacer una comparacion con "similar to", el caso es que no esta haciendo lo que debera porque cuando le digo pensin y muestro la variable para ver si la recibi bien, efectivamente me muestra

"pensin"

pero cuando empiezo a separar la cadena caracter por caracter para reemplazarlos por las cadenas correspondientes a las vocales, entonces me sale

"p e n s i ? ? n"

y cuando vuelve a unir mi cadena y le digo que la muestre en pantalla para saber como se ve, entonces me muestra

"p[e����E����]ns[i����I����]n"

lo cual es extrao porque aparte de no modificarme la o, la toma como dos caracteres por separado y los caracteres que vienen tildados de diferentes formas dentro de mis cadenas de reemplazo, se cambian por interrogantes. La funcin que estoy utilizando es la siguiente:
no hace lo que deberia porque seguramente estas haciendo algo mal, debes tener en cuenta que el encoding del cliente y servidor deben ser el mismo para evitar este tipo de cosas.

te sugiero que de vez en cuando leas la documentacion...
  #4 (permalink)  
Antiguo 10/08/2006, 17:01
Avatar de DarkXNightmare  
Fecha de Ingreso: agosto-2005
Ubicacin: Somewhere Over The Rainbo
Mensajes: 181
Antigedad: 12 aos, 4 meses
Puntos: 0
Configura el navegador Web y aplicacin que estas usando para visualizar caracteres especialies ...

Atte... DarkXNightmare ;D.
__________________
Cambiando mi Web... sean pacientes :P
  #5 (permalink)  
Antiguo 10/08/2006, 17:17
Avatar de KarenFerreira  
Fecha de Ingreso: abril-2005
Ubicacin: Bucaramanga, Colombia
Mensajes: 87
Antigedad: 12 aos, 8 meses
Puntos: 2
No viene al caso lo que me dices foo, mi problema en realidad no es que no sepa como reemplazar los caracteres, sino que no se como rayos esta interpretando apache o php (eso no lo s) mi cadena de caracteres y porque cuando quiero dividirla en caracteres individuales me convierte los caracteres con tilde "dos ? " porque mi problema en realidad son las palabras que recibo que vienen previamente tildadas, y la secuencia de caracteres especiales por la que quiero reemplazar las vocales de mi cadena, porque todo lo que viene con , , ^,` termina volviendose un ?? y sigo sin entender el porque... por cierto, ya habia probado to_ascii y no me sirve para hacer lo que necesito
__________________
'Esto va a salir mal de todos modos, asi que no vale la pena estresarse por eso.' Tony Kakko.
  #6 (permalink)  
Antiguo 10/08/2006, 17:22
Avatar de DarkXNightmare  
Fecha de Ingreso: agosto-2005
Ubicacin: Somewhere Over The Rainbo
Mensajes: 181
Antigedad: 12 aos, 4 meses
Puntos: 0
Podras mandar el Script para ver la funcin y como la estas aplicando?
De esa manera podremos ayudarte ms :P.

Atte... DarkXNightmare ;D.
__________________
Cambiando mi Web... sean pacientes :P
  #7 (permalink)  
Antiguo 10/08/2006, 17:37
foo
 
Fecha de Ingreso: febrero-2006
Mensajes: 278
Antigedad: 11 aos, 10 meses
Puntos: 0
haz lo que te comenta DarkXNightmare o en todo caso explica lo que realmente quieres hacer en postgresql, talvez haya una solucion alterna...
  #8 (permalink)  
Antiguo 10/08/2006, 20:47
 
Fecha de Ingreso: agosto-2006
Ubicacin: Madrid
Mensajes: 95
Antigedad: 11 aos, 4 meses
Puntos: 0
mira cómo está codificado tu archivo, si está en iso-8859-1 o en UTF-8. Si está en UTF, ahí tienes el problema
  #9 (permalink)  
Antiguo 15/08/2006, 08:40
Avatar de KarenFerreira  
Fecha de Ingreso: abril-2005
Ubicacin: Bucaramanga, Colombia
Mensajes: 87
Antigedad: 12 aos, 8 meses
Puntos: 2
Busqueda Respondiendome a mi misma

Bueno, pues despues de unos das... tal vez muchos, encontre una solucin a mi problema, Nigel tena razn, el meollo estaba en la codificacin de los archivos, asi que hice lo siguiente:

Cdigo PHP:
//esta es la funcin que tena al principio
function tildes($varparam)
{
    
$res "";
/*pero aca le agregu dos lineas adicionales para pasar los caracteres de UTF-8 a codificacin ISO*/
    
    
$varparam2 utf8_decode($varparam);
    
$varparam $varparam2;

/*luego sigo con el procedimiento normal, aunque tambien agregu la  al proceso*/

    
for($i=0$i<strlen($varparam); $i++)
    {
        
$cur substr($varparam$i1);
        if(
$cur=="e"||$cur==""||$cur==""||$cur==""||$cur==""||$cur=="E"||$cur==""||$cur==""||$cur==""||$cur=="")
          
$res $res."[eE]";
        else
        if (
$cur=="a"||$cur==""||$cur==""||$cur==""||$cur==""||$cur=="A"||$cur==""||$cur==""||$cur==""||$cur=="")
            
$res $res."[aA]";
        else
        if (
$cur=="i"||$cur==""||$cur==""||$cur==""||$cur==""||$cur=="I"||$cur==""||$cur==""||$cur==""||$cur=="")
            
$res $res."[iI]";
        else
        if (
$cur=="o"||$cur=="&oacute;"||$cur==""||$cur==""||$cur==""||$cur=="O"||$cur==""||$cur==""||$cur==""||$cur=="")
            
$res $res."[oO]";
        else
        if (
$cur=="u"||$cur==""||$cur==""||$cur==""||$cur==""||$cur=="U"||$cur==""||$cur==""||$cur==""||$cur=="")
            
$res $res."[uU]";
        else
        if (
$cur=="c"||$cur==""||$cur=="C"||$cur=="")
            
$res $res."[cC]";
        else if (
$cur==""||$cur=="")
            
$res $res."[]";
        else
            
$res $res.$cur;
    }

    return 
$res;

Luego verifique que la codificacin del archivo fuera ISO y listo, problema solucionado, gracias a todos por sus aportes.
__________________
'Esto va a salir mal de todos modos, asi que no vale la pena estresarse por eso.' Tony Kakko.
Atencin: Ests leyendo un tema que no tiene actividad desde hace ms 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 10:17.