Detectando UTF8 en PHP

Enviado por clbustos el Lun, 26/12/2005 - 23:53.

No resistí la tentación de hacer lo mismo que hice en Detectando UTF-8 en Ruby, pero en PHP. El resultado es el siguiente:

  1.  <?php
  2.  define("UTF_8", 1);
  3.  define("ASCII", 2);
  4.  define("ISO_8859_1", 3);
  5.  function codificacion($texto)
  6.  {
  7.   $c = 0;
  8.   $ascii = true;
  9.   for ($i = 0;$i<strlen($texto);$i++) {
  10.   $byte = ord($texto[$i]);
  11.   if ($c>0) {
  12.   if (($byte>>6) != 0x2) {
  13.   return ISO_8859_1;
  14.   } else {
  15.   $c--;
  16.   }
  17.   } elseif ($byte&0x80) {
  18.   $ascii = false;
  19.   if (($byte>>5) == 0x6) {
  20.   $c = 1;
  21.   } elseif (($byte>>4) == 0xE) {
  22.   $c = 2;
  23.   } elseif (($byte>>3) == 0x1E) {
  24.   $c = 3;
  25.   } else {
  26.   return ISO_8859_1;
  27.   }
  28.   }
  29.   }
  30.   return ($ascii) ? ASCII : UTF_8;
  31.  }
  32.  
  33.  function utf8_encode_seguro($texto)
  34.  {
  35.   return (codificacion($texto)==ISO_8859_1) ? utf8_encode($texto) : $texto;
  36.  }
  37.  ?>

Lo pueden probar con

  1.  <?php
  2.  $a="Ascii";
  3.  $b="ISO-8859-1: áéíóú";
  4.  $c=utf8_encode($b);
  5.  echo utf8_encode_seguro($a)."\n";
  6.  echo utf8_encode_seguro($b)."\n";
  7.  echo utf8_encode_seguro($c)."\n";
  8.  ?>

Si me da el ánimo, haré lo mismo en C. No creo que sea nada tan terrible...

Imagen de Rinoceronte Final

No llego a comprender como en el código, discriminas a ISO-8895-1 de UTF-8. De ASCII, si no me equivoco, basta con saber si algun caracter supera el valor de 127 para descartarlo, verdad?

Por cierto, una fuente "monospace" tipo courier para mostrar el código, estaría bien. :-)

Enviado por Rinoceronte Final (no verificado) el Mar, 27/12/2005 - 22:49.
Imagen de clbustos

La verdad, no puedo saber si es ISO-8859-1, Windows-1254 o cualquiera de esos.
Ahora, UTF-8 se caracteriza porque tiene una forma muy particular de "avisar" que existen caracteres multibytes dentro de él. En corto, existe una secuencia definida de bits (de los más significativos) que debe seguirse en forma estricta. Los detectores que he puesto en el sitio tratan de detectar esta secuencia. Puedes leer más en ¿Que onda con UTF-8? Sets de caracteres, la web y Ajax.

Enviado por clbustos el Mié, 28/12/2005 - 01:28.
Imagen de Patricio Gonzalez L.

La solucion para acentos y caracteres latinos en hosting yanquis seria, incluir la siguiente linea en el encabezado de la pagina principal de nuestro sitio:

header('Content-Type: text/html; charset=UTF-8');
?>

a mi me funciono de primera en mi sitio estaba chato con los acentos y colocando en todos mis sitios ó >> ó etc.

espero a alguien le sirva

Enviado por Patricio Gonzalez L. (no verificado) el Jue, 12/10/2006 - 20:19.
Imagen de Perejilillo desconocido

gracias, esa solucion me ayudo a resolver mi problema

Enviado por Perejilillo desconocido el Jue, 26/07/2007 - 15:05.
Imagen de Perejilillo desconocido

Muchas gracias, tu código me ha salvado de un apuro :)

Enviado por Perejilillo desconocido el Mié, 03/10/2007 - 14:49.
Imagen de clbustos

Para eso estamos!

Enviado por clbustos el Mié, 03/10/2007 - 15:19.

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.
If you have a Gravatar account, used to display your avatar.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato