OWarux

jueves, marzo 30, 2006

PROYECTO=$InCopy_Parser_[2];


Iniciando algunas funciones

Para el desarrollo de este proyecto, primero tengo que ver como extraer el texto de los documentos INCD, para lo cual, tengo que parsear cada archivo, y el resultado, siendo el contenido de la nota, guardarlo en la base de datos de MySql.

La forma más fácil que encontre para parsear el documento es con el codigo:

<?php
echo "Este es el contenido de un documento de InCopy <hr>";
$documento=new DomDocument();
$documento->preserverWhiteSpace=false;
$documento->load('mi_nota.incd');
$cadena_xml=$documento->saveXML();
echo $cadena_xml;
?>


Este codigo funciona, porque antes de este proyecto ya lo habia probado cuando estaba estudiando PHP, pero al hacerlo en casa (mi laboratorio de sistemas), marcaba error "PHP Fatal error:  Class 'DOMDocument' not found in test1.php". Por lo tanto el error estaba en mi servidor, no en el código. Dicho servidor esta corriendo en una modesta pc con un procesador Athlon XP con 512 de Ram, en el cual instale la version de Mandriva Linux 2006 Free Edition. Mis servidores anteriores los habia estado instalando con Mandrake 10.0 y no habia tenido este problema.

Despues de navegar en busca de referencias encontre que en las versiones de PHP4 hay librerias especificas para el manejo de XML y DOM, pero en PHP5 (que es la versión que viene en Mandriva 2006) ya viene compilada por default (al menos eso dicen), pero con este error veo que no es cierto, por lo tanto habia que buscar las librerias de php-dom y php-xml para esa version en paquetes RPM, las baje a mi server y las instale, pero el paquete php-xml marco un error donde decia que no podia descomprimir un archivo, pero al final dijo que si instalo el paquete. Asumiendo que estaban instalados ambos procedi a ejecutar de nuevo mi archivo php y esta vez funciono sin ningun problema. Ningun problema en ese momento.

Las codificaciones de caracteres que tienen estos archivos INCD son principalmente "iso-8859-1", "UTF-8" y uno que otro "UTF-16", los mas importantes para nuestro sistema son los dos primeros.

Pues bien, cuando probe pro primera vez utilice un archivo codificado en "iso-8859-1", pero cuando probe con uno codificado en "UTF-8" me dio muchos caracteres extraños, esto por que me los mando en "iso-8859-1" siendo en realidad "UTF-8".

De nuevo a investigar, y encontre que existen en PHP dos funciones denominadas utf8_decode() y utf8_encode(), la primera pasa de "UTF-8" a "iso-8859-1" y la segunda hace lo inverso, asi que no habia problema, para los archivos codificados en UTF-8 solo tenia que modificar mi archivo php de la siguiente manera:

<?php
$documento2=new DomDocument();
$documento2->preserverWhiteSpace=false;
$documento2->load('mi_nota_utf8.incd');
$cadena_xml2=$documento2->saveXML();
$new=utf8_decode($cadena_xml2);
echo $new;
?>


Esto deberia funcionar, pero en ese instante no lo hizo, ¿Que pacho? Pues bien, despues de horas de buscar, todo apuntaba a un problema en las librerias de PHP, dado que las funciones estan contenidas en php-xml, recorde que habia marcado un error al instalarla, asi que procedi a buscarla de nuevo en otro sitio, la instale y esta vez no dio error alguno durante la instalacion.Esto se ve logico, pero creanme, me tarde algunas horas en dar con el chistesito. Ya lo decia el emperador Marco Aurelio "Principios basicos... Simplicidad".

Después de esto, probé de nuevo el código y esta vez funciono.

Así que después de este pequeño éxito, me retiro a descansar un poco, que ya son las 6 de la mañana. Dudas, sugerencias, comentarios o donaciones son bien recibidas.

[owar@owarux ~]$echo "Buenas noches";

1 Debugs:

Publicar un comentario

<< Home