fabricawebs
Blog donde podrás encontrar el árticulo o tutorial que estas buscando sobre PHP, JavaScript, XML, Flash, Ruby on Rails, o desarrollo web en general.

Problemas desarrollando en web con google chrome

Category: , By Carlos

Para los programadores es habitual utilizar la opción "ver código fuente" en el navegador web, de este modo podemos introducir comentarios en el html que nos ayudan en la tarea de debuggear nuestras aplicaciones.

Hace unos días me ocurrió algo curioso, imprimía unas variables como comentarios y cuando le daba a ver código fuente no aparecian por ninguna parte. Después de perder un buen rato me di cuenta de que solo sucedía con el navegador Google Chrome y que por tanto no se trataba de un problema de mi aplicación si no de la forma en que Chrome muestra el código fuente.

Normalmente el código fuente que nos enseña el navegador se obtiene de la copia local que se crea cuando recibes la página web desde el servidor. Pero con el nuevo navegador Google Chrome la opción "ver código fuente" lo que hace es volver a pedir la página y cargarla con el siguiente código delante view-source:, el cual muestra directamente el código fuente recibido sin renderizarlo. Este sutil cambio de volver a cargar la página en lugar de mostrarnos la copia local puede tener consecuencias desastrosas, pues al hacer una nueva petición el servidor recibe una petición extra y el resultado es probable que sea distinto al de la primera petición, sobretodo si tenemos en cuenta que encima la nueva petición de la página se hace sin enviar los parametros POST.

Así que ya sabéis, mientras no cambién este comportamiento en Chrome, la opción "ver código fuente" no es de fiar y si se trata de una petición POST al servidor el código fuente que te muestra no tiene nada que ver con la página que estas viendo. Cuidadín!

 

Los ampersands "&" y las URLS

Category: , By Carlos

Hace unos días validando el xhtml de una web, me encontré con el siguiente error cannot generate system identifier for general entity "loquesea"., revisé el error y se trataba de una URL que llevaba parametros por GET, aparentemente todo estaba correcto y no comprendía a que venía el error, así que me puse a leer un artículo muy útil al que te remitía la WDG explicando los errores más comunes a la hora de validar el código.


Por lo visto siempre que escribamos el caracter & debemos hacerlo con su codificación en html &, al escribir el caracter directamente sin su código los navegadores intentan sustituirlo por un caracter especial, en la mayoría de los casos esto no será posible y lo escribirán tal cual asumiendo que es lo que deseaba mostrar el programador, pero hay ciertos casos donde sí puede ser sustituido y no encontraremos con algo inesperado.


Veamos por ejemplo la siguiente URL que se encarga de mostrar una ficha de un registro "http://www.your-site.com/njavascript:void(0)ews.php?layout=1&reg=45", seguro que nuestra intención es enviar a la url las variables layout y reg mediante GET, pero el navegador al interpretar el html intentará sustituir &reg=45 por un código, en este caso por ®, es decir, el caracter ®.


Esto sucede en todo el html incluido los atributos como href de los links, así que cualquier variable cuyo nombre pueda ser reemplazado por un caracter especial ocasionará problemas, por ejemplo, &lang=en se reemplazará por
〈=en



<!-- This is invalid! -->
<a href="foo.cgi?chapter=1&section=2&copy=3&lang=en">...</a>


<a href="foo.cgi?chapter=1&amp;section=2&amp;copy=3&amp;lang=en">...</a>

 

Las ñ y los acentos en busquedas de mysql

Category: , By Carlos
Recientemente tuve que revisar el comportamiento extraño que tenía un script que utilizaba para buscar libros en una base de datos, cuando realizaba una busqueda de libros cuyo título contuviese la cadena "eñe" el número de libros encontrados era muy superior al esperado. Tras revisar los títulos ví que el problema era que la consulta devolvía todos los libros cuyo título contenía "eñe" y además todos los que contenían "ene". Por lo visto el campo título en la BD tenía asignado el conjunto de caracteres por defecto "latin1" por lo que el caracter eñe era reconocido pero el "collation" por defecto latin1_swedish_c1 asigna a los caracteres ñ y n el mismo valor.

El conjunto de caracteres y la colación son cosas relacionadas pero distintas, de ahí la importacia de comprender correctamente la propiedad collation. Según la documentación online de Mysql 5.0 : Una colación es un conjunto de reglas para comparar caracteres en un conjunto de caracteres..

Finalmente y ya que no podía modificar la estructura de la BD la solución fue añadir explícitamente una colación para esa comparación:

p.nombre like '%eñe%' COLLATE latin1_spanish_ci


Una curiosidad a la hora de asignar los collation en la estructura de BD es que se puede asignar collations a distintos niveles, es decir, la base de datos tiene asignado un collation y este es heredado por sus tablas si estas no especifican uno explicitamente. Lo mismo pasa con los campos de las tablas, los cuales heredan el collation de la tabla a la que pertenecen si no se les declara uno específico para ellos.

De este modo lo ideal sería tener nuestra base de datos creada con el collation especifico del idioma en cual creamos la aplicación y luego en los campos en que guardamos texto en otros idiomas especificar ese explícitamente esos idiomas.