Codificación de caracteres para documentos web.

Voy a hacer una pequeña introdución con una anecdota.

Suelo ír a una libreria a comprar libros; lo curioso de ésta librería es que en la puerta, con un rotulo en rojo, pone “libros en Español“.
Un día fui a comprar un libro, más que nada porque el autor estaba allí. Llego a la librería, entro y hablo con el autor del libro y me dice que el libro está escrito en Francés; porque el cree que ese idioma es mucho más romántico y va más acorde con los relatos que el narra en el libro.
Llego a casa; contento porque traigo el libro firmado y me ha salido bien de precio. Lo abro y cual es mi sorpresa; ¡el libro está escrito en Ingles! WTF?

Pues bien; ahora vamos a hacer una pequeña conversión de identidates; para poder extrapolar el caso a el tema de codificación de carácteres:

Librería            = Servidor web(IIS, Apache, …)
Autor del libro = el programador; creador del documento web
El libro             = documento web
yo, lector         = navegador web(firefox, Internet Explorer)

Lo primero; yo(como el navegador web) me acuerdo de la madre que pario al de la librería, y al autor; porque me están timando. Pero bueno ya tengo el libro y tendré que leerlo, que para eso lo he comprado, pero antes tendré que saber como tengo que leer el libro.

Hay una diferencia entre yo y el navegador web; el navegador web sabe muchos idiomas, pero no sabe identificarlos; esto es que hay que decirle en que “idioma” tiene que leer el libro.

Así que el navegador tiene una regla(porque se lo marca los estándares) y es que va a hacer caso a la librería(servidor) y va a intentar leer mi libro en Español, por lo que comienza a balbucear tonterías sin sentido(esto es lo que pasa cuando vemos webs con simbolos raros, sin acentos, …)

Pero el “autor” (programador) sabe un truquito para que se salte a la librería y le haga caso a él, y le dice algo como:

“el cabecera de este documento pone que está en francés, así que léelo en francés”

Que más o menos fue lo que me dijo cuando compre el libro, así en voz muy bajita para que no me escuchase el dueño de la librería.

Pero claro; el navegador, con su inocencia que le caracteriza, le hace caso y comienza a leer el libro en francés, y la misma canción; a balbucear tonterías sin sentido.

Por lo que yo he identificado a los culpables para que estas cosas pasen;

  1. La maldita regla estándar que dice que la orden del servidor(librería) prevalece sobre la que pone el programador(el autor del libro)
  2. La ineptitud del programador(autor del libro) que no sabe ni en que codificación(idioma) a escrito su propio libro(documento web)
  3. Después de años de adelantos en la informática; aún hoy por hoy es casi imposible para los programas(navegador web) saber que codificación(lenguaje) tienen los documentos(libros). Se ha “avanzado” mucho con el boom de UTF8, pero aún eso no es suficiente, porque muchos programas no sabes que es ese Boom

Por lo que señores programadores; poneros de acuerdo con lo que dice el servidor y poner en el Doctype la verdadera codificación de carácteres y dejen de tocar las narices.

update: Recomiendo esta lectura:
ASCII, Unicode, UTF-8 y la Iñtërnâçiônàlizæçiøn - parte I

Generar una lista de árbol(tree list) html en php : I

En esta primera parte voy a generar una lista de árbol desde un array() que me he inventado, a modo de ejemplo; en la siguiente lo haré desde una base de datos; que es más fácil aún.

Por ahora para poder ver técnica nos vale; así será mucho más sencillo de comprender.

Lo primero es crear nuestra tabla de datos; una table que necesita de un requisitos; tener dos llaves. La primera llave será el Id del padre, el segundo será el Id de la variable o hijo.

$lista[idPadre][id]

Luego necesitamos una función recursiva que nos cree la lista; pero a esta función habrá que pasarle un parámetro, para decirle a partir de donde necesita crear el árbol(tree).

pego el código; y así lo podréis ver mejor:

<!– @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } –>

<?php

$lista=array();

$lista['0']['1']=‘parque’;

$lista['0']['2']=‘colegio’;

$lista['0']['3']=‘casa’;

$lista['1']['4']=‘cosas’;

$lista['1']['5']=‘gente’;

$lista['1']['6']=‘plantas’;

$lista['2']['7']=‘mesa’;

$lista['2']['8']=’silla’;

$lista['2']['9']=‘jardin’;

$lista['3']['10']=‘profe’;

$lista['3']['11']=‘gamberro’;

$lista['3']['12']=‘lapiz’;

$lista['6']['13']=‘árbol’;

$lista['6']['14']=‘flor’;

$lista['6']['15']=‘agua’;

$lista['9']['16']=‘jasmin’;

$lista['9']['17']=‘lirios’;

$lista['5']['18']=‘pedro’;

$lista['5']['19']=‘maría’;

function generaArbol($idPadre, &$lista)

{

if(!isset($lista[$idPadre])){

return ;

}

$level = $lista[$idPadre];

$out = ‘<ul>’;

foreach($level as $k=>$v){

$out .= ‘<li>’;

$out .= $v;

$out .= generaArbol((string)$k, $lista);

$out .= ‘</li>’;

}

$out .= ‘</ul>’;

return $out;

}

echo generaArbol(‘0′, $lista);

?>

Creando un interlineado xhtml desde php

Uno de las cosignas en el mundo de la programación, que más he escuchado en el trabajo es:

“hay mil maneras de programar; pero solo una es la buena”

cuando escucho eso me aterroriso; porque nunca sé si lo hago bien o mal. Usí que hoy voy a explicar una cosa sencilla, pero que he visto muchas maneras de hacer.

Código que utilizo con frecuencia para hacer un interlineado html desde php:

<?php $clases=array(‘uno’, ‘dos’, ‘tres’); ?>

<style>

.uno td{background-color:#ccc}

.dos td{background-color:#0fc}

.tres td{background-color:#999}

</style>

<table>

<?php for($i=0, $line=0; $i < 50; $i++, $line==3?$line=0:$line++): ?>

<tr class=<?php echo $clases[$line]; ?>>

<td> hola</td>

</tr>

<?php endfor; ?>

</table>

la variable $line es la que marca el tiempo de ciclo del interlineado; puede que no sea un código demasiado “elegante” pero creo que es de fácil comprensión para cualquiera

errores absurdos de los que me avergüenzo

llevo una semana muy agobiado; por la cantidad de trabajo . Pero también porque tenía que hacer una cosa que en principio era de lo más fácil de implementar.

Una autentificasión en Ldap con Nusoap(una librería para utilizar Soap); porque el server está en php4 (si aún quedan muchas empresas con PHP4) y desde ayer que llevo rompiendome la cabeza con un error.

al final, después cruzar unos emails con los desarrolladores del esrvicio, en EEUU. he podido corregir el error, pero cuando he visto donde estaba el error, no sabía si tirarme por la ventana o dejar esta profesión.

Mi gran error fue: Olvidarme de poner la barrita al final del parametro URI= “http://dominio.com/

espero no ser el único que comete estos errores y tarda más de un día en darse cuenta de la gran metedura de pata :(

Ayuda con Xdebug y PDT

he seguido todos los pasos para poder instalar Xdebug:

  • dado de alta el modulo en el php
  • configurar el php.ini para xdebug
  • lo pongo por el puerto 900
  • Console encoding = Utf8 (tamibén probe con “Cp12522)

Creo que el debuger se lanza, pero por algún motivo no veo hace caso a los breakpoint ni nada.

He montado un vídeo explicando mi problema; a ver si alguno me podría ayuda

update
Copio el config de php.ini a ver si estoy haciendo algo mal:

zend_extension_ts=C:\Archivos de programa\EasyPHP 2.0b1\php5\ext\php_xdebug.dll
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.idekey=default

The Cache :: una clase para controlar nuestro Zend_Cache File

Akra’s ha escrito una clase bastante sencilla y muy útil para poder utilizar Zend_Cache File.

ejemplo de uso:

$cacheEnabled = (bool)getenv('THE_CACHE_ENABLED') ? getenv('THE_CACHE_ENABLED') : false;
TheCache::init($cacheEnabledTMP_DIR.'/the-cache/');

$keyName 'data-z-a-b'// unique name describing this data set
$data TheCache::load($keyName)
if($data === false) { 
    $sql 'SELECT x,y FROM z WHERE a=b';
    $rs $db->Execute($sql);
    $data $rs->GetArray();
    TheCache::save($keyName$data);
}

Enlace a TheCache

Vídeo demo :: PHP Intelligence

Integrando GoogleCalendar en aplicaciones PHP

Google Calendar pone al servicio de los desarrolladores su API para poder acceder a contenidos y eventos de los usuarios. Las librerias(calses) SimpleXML y ZendGData son ideales para trabajar con los Fedds XML generados por ésta API(GoogleCalendar) y poder utilizarlos en nuestras aplicaciones PHP.  Este artículo es una introducción a la API de GoogleCalendar, demostramos cómo puede usarlo para moverse por la información generada por el usuario: añadir, actualizar y realizar búsquedas entre los eventos por palabras clave.
Este artículo introduce los datos de Google Calendar API, demuestra cómo puede usarlo para navegar generado por el usuario calendarios, añadir y actualizar calendario de eventos, y realizar búsquedas de palabras clave.

Symfonians. aplicación para crear una red social basado en symfony

Symfonians es el nombre de la nueva aplicación, publicado con licencia CC. La aplicación está echa con Symfony, así que para los desarrolladores de Symfony es una fantastica noticia.

Symfonyans, aplicación para crear una red social

enlace al proyecto: http://symfonians.org/

enlace a demo: http://symfonians.net/

Estándares de codificación para la programación PHP

Enrique Place comentaba(en un post) la situación de estándares de codificación que tenemos en php, y como somos los más anarquistas en este tema.

De ese post, que recomiendo la lectura del PDF con el estilo que propone Zend, me quedo con una frase:

“No eres tan especial como para crear tu propio estándar”

enlace a: Presentación: “Buenas Prácticas de Desarrollo en PHP”

« Píagina anteriorEntradas siguientes »