Re: Problemas con Caracteres Especiales

From: "Miguel Panuera" <mpanuera(at)gmail(dot)com>
To: "Alvaro Herrera" <alvherre(at)commandprompt(dot)com>, PostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Problemas con Caracteres Especiales
Date: 2007-08-24 03:37:13
Message-ID: f603e5000708232037o5fa03ddfvb04454cb928e2862@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

cada caracter extraño va a devolver una serie de numeros
"195131198146195133194161"
simplemente asignamos a cada cadena de numeros una letra para hacer el
cambio en la funcion ObtenerLetra

case "a195131198146195133194161b":
$Letra="Ú"; break;

<?php
header('Content-Type: text/html; charset=UTF-8');
function CambiarPalabra($Palabra){
$Data="";
$Op=0;$Op1=0;
$Ini=-1;$Fin=-1;
$i=0;
while ($i<strlen($Palabra)){
$ord = ord($Palabra[$i]);
if (utf8_encode(chr($ord)) != utf8_decode(chr($ord))){
if ($Op==0){
if ($Ini!=-1){
//Falta modificar si se encuentran mas de 2
caracteres extraños separados en una misma palabra
}
$Ini=$i;
}
$Data.=$ord;
$Op=1;
}
else {
if ($Op==1){
$Fin=$i;
}
$Op=0;
}
$i++;
}
$Izq=substr($Palabra,0,$Ini);
$Der=substr($Palabra,$Fin);
$Letra=ObtenerLetra($Data);
$Word=$Izq.$Letra.$Der;
return $Word;
}
function ObtenerLetra($Num){
$Letra="???";
$Num="a".$Num."b";
switch ($Num) {
case "a195131198146195133194161b":
$Letra="Ú"; break;
case "a195131198146195162226130172197147b":
$Letra="Ó"; break;
case "a195131198146195130194141b":
$Letra="Í"; break;
case "a195131198146195130194129b":
$Letra="Á"; break;
case "a195131198146195162226130172194176b":
$Letra="É"; break;
case "a195131198146195162226130172203156b":
$Letra="Ñ"; break;
case
"a195131198146195133194161195131198146195162226130172203156b":
$Letra="ÚÑ"; break;
case "a195131197161195131226128152b":
$Letra="ÚÑ"; break;
case "a195131194141b":
$Letra="Í"; break;
case "a195131226128152b":
$Letra="Ñ"; break;
case "a195145b":
$Letra="Ñ"; break;
case "a195137b":
$Letra="É"; break;
case "a195131226128154195130194176b":
$Letra="ro."; break;
case "a195130194176b":
$Letra="ro."; break;
case "a195131226128156b":
$Letra="Ó"; break;
case "a195131226128176b":
$Letra="É"; break;
}
if ($Letra=="???"){
echo "<br>$Num<br>"; //Muestra el codigo de la letra no
encontrada para agregarlo
}
return $Letra;
}
$LINK = pg_connect("host=localhost user=postgres password=postgres
dbname=base");
$Sql="select usua_id, usua_nombre from usuarios";
$Query=pg_query($Sql);
$Sql="";
while ($Fila = pg_fetch_row($Query)){
$filas++;
$Encode=utf8_encode($Fila[1]);
$Decode=utf8_decode($Fila[1]);
$Nombres="";
if ($Encode!=$Decode){
$aNombre = split(" ",$Fila[1]);
foreach ($aNombre as $Palabra){
$newPalabra=$Palabra;
if (utf8_encode($Palabra)!=utf8_decode($Palabra)){
$newPalabra=CambiarPalabra($Palabra);
}
else {

}
$Nombres.=$newPalabra.' ';
}
$Nombres=trim($Nombres);
echo $Fila[0]." - ".$Nombres."<br>";
$Sql.="update usuarios set usua_direccion='$Nombres' where
usua_id=".$Fila[0].";";
}
}
$Query=pg_query($Sql);
echo $Sql;
?>

El día 23/08/07, Miguel Panuera <mpanuera(at)gmail(dot)com> escribió:
>
> llege a resolver el problema con un script en php, :D
> dentro de un momento les paso el codigo, no esta muy bien programado :S,
> pero funciona :p
>
>
> El día 23/08/07, Alvaro Herrera <alvherre(at)commandprompt(dot)com> escribió:
> >
> > Gabriel Hermes Colina Zambra escribió:
> >
> > > --- Alvaro Herrera <alvherre(at)commandprompt(dot)com>
> > > escribió:
> > >
> > > > Con estos casos raros que aparecen cada vez me
> > > > convenzo más que es mala
> > > > idea usar Latin1 como server_encoding :-(
> > > >
> > >
> > > Yo uso latin1 y no tengo problemas, pero lo he usado
> > > desde la instalacion de postgresql, la creacion de la
> > > base y hasta los clientes todo en Latin1, ahi si fue
> > > coherente.
> >
> > El problema ocurre cuando la BD esta en Latin1 y los clientes envian en
> > UTF8. Al hacer la reconversion, los caracteres se guardan corruptos. Y
> >
> > como Latin1 no hace chequeo de validez, se guardan incorrectamente.
> >
> > Cuando es al reves, no hay problema, porque el servidor rechaza
> > caracteres UTF8 que no forman secuencias validas (UTF8 tiene chequeo de
> > validez a diferencia de Latin1).
> >
> > Cuando la BD es SQL_ASCII tampoco ocurre este problema, porque el
> > servidor no hace reconversion de caracteres (pero tiene otros problemas
> > que se manifiestan cuando se conecta un cliente con una codificacion A y
> >
> > los lee un cliente con una condificacion B).
> >
> > --
> > Alvaro Herrera
> > http://www.CommandPrompt.com/
> > The PostgreSQL Company - Command Prompt, Inc.
> >
>
>
>
> --
> Miguel Panuera C.
> STsoft Developer
> mpanuera(at)gmail(dot)com
> m(dot)panuera(at)stsoftperu(dot)com
>

de funcionar funciona :P, no esta bien hechecito pero funciona

Gracias a todos los que me ayudaron :D

--
Miguel Panuera C.
STsoft Developer
mpanuera(at)gmail(dot)com
m(dot)panuera(at)stsoftperu(dot)com

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Luis Perruca 2007-08-24 10:01:49 Intentando recuperar datos: pgsql 8.0.1 Windows
Previous Message Jaime Casanova 2007-08-24 02:03:12 Re: Recuperar data desde el directorio /data