Foros del Web » Programando para Internet » PHP »

Como detectar codificacion de una string?

Estas en el tema de Como detectar codificacion de una string? en el foro de PHP en Foros del Web. Buenas Amigos, tengo una dificultad. Tengo un script en php que genera un menu en javascript. En ese menu se incluye la palabra "Créditos". Tengo ...
  #1 (permalink)  
Antiguo 06/12/2006, 12:20
Avatar de mape367  
Fecha de Ingreso: noviembre-2004
Ubicación: CDE, Paraguay
Mensajes: 213
Antigüedad: 20 años
Puntos: 3
Como detectar codificacion de una string?

Buenas

Amigos, tengo una dificultad. Tengo un script en php que genera un menu en javascript. En ese menu se incluye la palabra "Créditos". Tengo instalado Xamp en mi pc que actua como servidor local.

El script funciona correctamente en mi maquina, que usa windows xp SP2 Español. Lo que sucede es que al probar el mismo script en una pc con windows xp sp2 Portugués, que tiene instalado el servidor xamp, no me funciona.

He intendado solucionar con utf8_decode($menu), funciona correctamente en la maquina con windows en portugués, pero deja de funcionar en la que tiene español. También intente utf8_decode(utf8_encode($menu)), pero ocurre lo inverso y no funciona en la que tiene winxp portugues.

Habría forma de configurar esto para que tenga un comportamiento único independiente del idioma? A que se debe esto? a la configuración del apache?

Si no es configurable, como puedo detectar el juego de caracteres para poder aplicar o no utf8_decode()?

Desde ya muchas gracias por la ayuda!


PD: cuando digo no funciona, me refiero a que el caracter asentuado "é" no se visualiza correctamente.
Ya intente poner el siguiente codigo al principio del script pero no funciona!
Código PHP:
       header("Content-Type: text/html; charset=iso-8859-1"); 
Saludos
  #2 (permalink)  
Antiguo 06/12/2006, 12:53
 
Fecha de Ingreso: mayo-2005
Mensajes: 201
Antigüedad: 19 años, 5 meses
Puntos: 2
Re: Como detectar codificacion de una string?

Usa gettex http://www.php.net/manual/en/ref.gettext.php, con eso das soporte NLS.
también te dejo la liga a un articulo que explica como usar gettext
__________________
Saludos!
Mty-NL..
  #3 (permalink)  
Antiguo 06/12/2006, 13:06
Avatar de mape367  
Fecha de Ingreso: noviembre-2004
Ubicación: CDE, Paraguay
Mensajes: 213
Antigüedad: 20 años
Puntos: 3
Re: Como detectar codificacion de una string?

Buenas

HerSAn, gracias por responder, pero no estoy queriendo traducir ninguna cadena de texto. Lo que deseo es unificar la codificacion de los textos enviados al navegador desde el servidor, y que eso se haga de forma independiente al idioma del servidor.

El texto que se envía es el mismo (Créditos), pero en español se muestra bien y en portugués no. Todo esto está explicado en el primer post!

Alguien más puede ayudarme?


Desde ya muchas gracias.
  #4 (permalink)  
Antiguo 06/12/2006, 13:12
foo
 
Fecha de Ingreso: febrero-2006
Mensajes: 278
Antigüedad: 18 años, 9 meses
Puntos: 0
Re: Como detectar codificacion de una string?

en principio tus archivos deberían estar guardados con codificacion utf-8, y lo siguiente es simplemente enviar explícitamente las cabeceras para que sean interpretadas como utf-8, con esto no deberias tener problemas
  #5 (permalink)  
Antiguo 06/12/2006, 13:19
Avatar de mape367  
Fecha de Ingreso: noviembre-2004
Ubicación: CDE, Paraguay
Mensajes: 213
Antigüedad: 20 años
Puntos: 3
Re: Como detectar codificacion de una string?

Gracias foo

Lo que pasa es que los textos que son enviados entán guardados en una base de datos mysql con codificación latin1.

Como podría solucionar este problema? lo que me resaulta raro es que en la maquina con winxp pt los textos de la base de datos me los detecta como utf8, siendo que la base de datos tiene la misma configuracion que la winxp es (en esta detecta los textos como iso-8859-1).

Saludos
  #6 (permalink)  
Antiguo 07/12/2006, 06:15
Avatar de mape367  
Fecha de Ingreso: noviembre-2004
Ubicación: CDE, Paraguay
Mensajes: 213
Antigüedad: 20 años
Puntos: 3
Re: Como detectar codificacion de una string?

Buenas,

Amigos, encontre una solución
Código PHP:
 <?php
 define
("UTF_8"1);
 
define("ASCII"2);
 
define("ISO_8859_1"3);
 function 
codificacion($texto)
 {
     
$c 0;
     
$ascii true;
     for (
$i 0;$i<strlen($texto);$i++) {
         
$byte ord($texto[$i]);
         if (
$c>0) {
             if ((
$byte>>6) != 0x2) {
                 return 
ISO_8859_1;
             } else {
                 
$c--;
             }
         } elseif (
$byte&0x80) {
             
$ascii false;
             if ((
$byte>>5) == 0x6) {
                 
$c 1;
             } elseif ((
$byte>>4) == 0xE) {
                 
$c 2;
             } elseif ((
$byte>>3) == 0x14) {
                 
$c 3;
             } else {
                 return 
ISO_8859_1;
             }
         }
     }
     return (
$ascii) ? ASCII UTF_8;
 }

 function 
utf8_decode_seguro($texto)
 {
     return (
codificacion($texto)==ISO_8859_1) ? $texto utf8_decode($texto);
 }
 
?>

 <?php
 $a
="Ascii";
 
$b="ISO-8859-1: áéíóú";
 
$c=utf8_encode($b);
 echo 
utf8_decode_seguro($a)."\n";
 echo 
utf8_decode_seguro($b)."\n";
 echo 
utf8_decode_seguro($c)."\n";
 
?>
Es un script basado en el script de Clbustos, en realidad lo unico que modifque fue que en vez de devolver el resultado siempre en utf8, lo hace en ISO 8859-1. El script Original esta disponible aquí.

Espero sea de utilidad para alguien más. No lo habia encontrado anteriormente porque no sabía como buscarlo en google, luego de haber lanzado muchas busquedas y analizado varios articulos con varias palabras claves, escribi unas palabras claves que no recuerdo, y ahí estaba, jeje.

Saludos
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 14:42.