Batiburrillo.net Viernes, 04 de julio de 2008 | 08:35
Páginas vistas desde 1/01/2008: 4425747 | Hoy: 8054
Visitantes totales: 1491763 | Hoy: 2137 | Online: 80
¡De todo un poco!
Búsqueda en Batiburrillo  

Texto en ISO 8895-1 a partir de datos en UTF-8

 
  Todas las categorías

· Novedades
· Sistema operativo
· Productividad
· Internet
· Sitios web
· Hardware

Alabaja.com

  Foros de Batiburrillo

 Últimos mensajes
04.07 3:59 Electron
Mensaje Ver extensión de a...
04.07 1:54 EvoLuT
Mensaje Nueva Red Irc-Gent...
04.07 1:43 Paradox
Mensaje Me desapareció el ...
03.07 10:54 kr2cho
Mensaje Mu Blackangel
03.07 10:35 fabriciano
Mensaje Problema al Instal...
03.07 10:30 fabriciano
Mensaje Trasladar Foro de ...
03.07 10:20 fabriciano
Mensaje Pantalla PC se apa...
03.07 4:39 Carlos Alberto Carcagno
Mensaje Comportamiento hum...
03.07 3:22 BAHADA
Mensaje Descargar el Photo...
02.07 4:06 fabriciano
Mensaje Problema con el PH...

  Destacado

El pedo en Argentina

  Descargas de Software

Últimas novedades

Dell
Experiencia en calidad
Configuración personalizada de tu PC
¡Lo último de la tecnología al mejor precio!

Webmasters - Directorio de Sitios en Internet Webmasters
Directorio de Sitios en Internet
Imaginación Imaginación
Artículos para disfrutar
Webquest - Actividad de investigación Webquest
Actividad de investigación

Los caracteres que se muestran en una página web o que se almacenan en una base de datos pueden estar codificados en distintos formatos de caracteres. El formato UTF-8 (8-bit Unicode Transformation Format) utiliza, para representar los alfabetos de una gran cantidad de lenguajes, grupos de bytes en el estándar Unicode. Se utiliza en una gran cantidad de páginas web escritas en diversos idiomas, entre los que se encuentra el castellano. La ISO 8895-1 define la codificación de los caracteres latinos, incluyendo las letras acentuadas y cualquier otro diacrítico. Vale para escribir cualquier lengua de Europa Occidental.

El problema surge cuando se quieren mostrar en una página con codificación ISO 8895-1 caracteres procedentes de una base de datos codificada con UTF-8. A nosotros nos ha ocurrido al querer mostrar en la página principal de Batiburrillo.net (en ISO 8895-1) los últimos artículos escritos en un blog hecho con Wordpress y, por consiguiente y con el fin de respetar las normas, codificado en UTF-8. Teníamos el script para leer el RSS pero al insertarlo en la página aparecían caracteres extraños.

¿Cómo lo solucionamos?

Muy fácilmente. Recurrimos a una función implementada por defecto en la mayoría de las versiones de PHP, utf8_decode.

De esta forma si los datos están dentro de una base de datos codificada en UTF-8, no habrá desajuste a la hora de mostrar los caracteres especiales en ISO 8895-1. Tendríamos que hacer algo similar a lo siguiente:

  Código:

<?php
echo "utf8_decode( $datos_utf8 )";
?>

En nuestro caso, el script para leer el documento XML, codificado en UTF-8, y mostrar los resultados en una página codificada en ISO 8895-1, sería el siguiente:

  Código:

<?php
set_time_limit(0);

$file = "http://medios.batiburrillo.net/wp-rss2.php";

$rss_channel = array();
$currently_writing = "";
$main = "";
$item_counter = 0;

function startElement($parser, $name, $attrs) {
global $rss_channel, $currently_writing, $main;
switch($name) {
case "RSS":
case "RDF:RDF":
case "ITEMS":
$currently_writing = "";
break;
case "CHANNEL":
$main = "CHANNEL";
break;
case "IMAGE":
$main = "IMAGE";
$rss_channel["IMAGE"] = array();
break;
case "ITEM":
$main = "ITEMS";
break;
default:
$currently_writing = $name;
break;
}
}

function endElement($parser, $name) {
global $rss_channel, $currently_writing, $item_counter;
$currently_writing = "";
if ($name == "ITEM") {
$item_counter++;
}
}

function characterData($parser, $data) {
global $rss_channel, $currently_writing, $main, $item_counter;
if ($currently_writing != "") {
switch($main) {
case "CHANNEL":
if (isset($rss_channel[$currently_writing])) {
$rss_channel[$currently_writing] .= $data;
} else {
$rss_channel[$currently_writing] = $data;
}
break;
case "IMAGE":
if (isset($rss_channel[$main][$currently_writing])) {
$rss_channel[$main][$currently_writing] .= $data;
} else {
$rss_channel[$main][$currently_writing] = $data;
}
break;
case "ITEMS":
if (isset($rss_channel[$main][$item_counter][$currently_writing])) {
$rss_channel[$main][$item_counter][$currently_writing] .= $data;
} else {
$rss_channel[$main][$item_counter][$currently_writing] = $data;
}
break;
}
}
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($file, "r"))) {
die("No se puede abrir el archivo XML");
}

while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);


if (isset($rss_channel["ITEMS"])) {
if (count($rss_channel["ITEMS"]) > 0) {
for($i = 0;$i < 13;$i++) {
if (isset($rss_channel["ITEMS"][$i]["LINK"])) {
print ("\n- <a href=\"" . $rss_channel["ITEMS"][$i]["LINK"] . "\". target=_blank>"."<b>" . utf8_decode($rss_channel["ITEMS"][$i]["TITLE"]) ."</b>". "</a><br />");
} else {
print ("\n" . utf8_decode($rss_channel["ITEMS"][$i]["TITLE"]) . "");
}
}
} else {
print ("No hay contenidos");
}
}
?>

Hemos señalado con color azul los lugares en los que hemos incluido la función de decodificación de los caracteres especiales escritos en el código UFT-8.

Artículos relacionados:
  El juego de caracteres en un backup de una base de datos
  Crear recuadro
  Crear una página web enmarcada
  Hackeo de los foros phpBB

 

Las botellas de don Rufino

MatemáticasNo sé por qué, pero el vino siempre fue, además de un regalo para el paladar, un producto anhelado por los criados de casas bien. El criado de don Rufino encima sabía matemáticas.
Don Rufino era rico, muy rico. Tenía una gran mansión, con capilla y bodega. En esta última ...

 

STOIK Imagic Free Browser 4.0

STOIK Imagic Free Browser 4.0STOIK Imagic Free Browser es una aplicación que sirve para organizar, realzar y manejar imágenes. Permite importar y compartir tus fotografías digitales. Además dispondrás de una imagen en miniatura (tumbnail) de cada una de ellas.
Incluye una gran cantidad de herramientas que ...

 

¿Qué piensan los niños de sus mamás?

¿Qué piensan los niños de sus mamás?Son niños de segundo de educación primaria. Tienen entre siete y ocho años. Su bandera es la sinceridad. En su mente, aún limpia, surgen las ideas sin tapujos, sin contaminación. No son capaces, todavía, de adulterar la realidad y de responder con mentiras. Son espontáneos, concisos, no mienten, dicen lo ...