nov
12
2008

[TRUCO] Funcion de Postgres para remplazar caracteres especiales HTML

Para aquellos que caemos en la codificación iso-8859-1, debemos lidiarlos con los famosos caracteres especiales. Y si aparte le agregamos el hecho de tener que guardarlos en una base de datos y luego queremos poner uno de estos caracteres en una página, debemos sustituirlo por su código.  Por ejemplo, la “á” (a minúscula acentuada) se escribe “á” de modo que la palabra página se escribiría en una página HTML de este modo: págin.

Esto quiere decir que en la base de datos debemos  guardar el respectivo “á” en lugar de “á” ademas de verificar que la codificacion de la base de datos sea LATIN1 (en la mayoria de los casos).

Pero cuando utilizas sistemas como BIRT para el reporteo de los datos, pues cambiar estos caracteres solo a travez de la Palette Text y usar el formato HTML. Por desgracia esto solo funciona en el Layout y no en el Master Page, y como es mucha lata hacer todo eso, voy a utilizar la siguiente funcion (se me ocurririan mas pero siempre hay formas de solucionarlo “correctamente” y no “facilmente”).

CREATE OR REPLACE FUNCTION CaracterEspecial(varchar) RETURNS varchar  AS '
DECLARE
valor varchar;
temporal varchar;
BEGIN
SELECT replace($1, "Á", "Á") into temporal;
SELECT replace(temporal, "É", "É") into temporal;
SELECT replace(temporal, "Í", "Í") into temporal;
SELECT replace(temporal, "Ó", "O") into temporal;
SELECT replace(temporal, "Ú", "Ú") into temporal;
SELECT replace(temporal, "Ñ", "Ñ") into temporal;
SELECT replace(temporal, "á", "á") into temporal;
SELECT replace(temporal, "é", "é") into temporal;
SELECT replace(temporal, "í", "í") into temporal;
SELECT replace(temporal, "ó", "ó") into temporal;
SELECT replace(temporal, "ú", "ú") into temporal;
SELECT replace(temporal, "ñ", "ñ") into temporal;
valor := temporal;
RETURN valor;
END;
'
LANGUAGE plpgsql;

Y que obtenemos con esto… el reemplazo de caracteres especiales en sentencias SQL para poder ser manejados directamente. Si bien lo que queires es lo opuesto, pasar de “á” a su caracter especial “á. Pues solo hay que invertir la funcion:

CREATE OR REPLACE FUNCTION CaracterEspecial(varchar) RETURNS varchar  AS '
DECLARE
valor varchar;
temporal varchar;
BEGIN
SELECT replace($1, "Á", "Á") into temporal;
SELECT replace(temporal, "É", "É") into temporal;
SELECT replace(temp...

Pues un punto a la flojera y a los “rapido” y “facil” contra cero de “correctamente”.

Nota: Como seguramente me preguntaran como usarla… ahi ta:

SELECT Campo1, Campo2, CaracterEspecial(Campo3), Campo4 FROM Tabla

No hay comentarios »

RSS feed for comments on this post. TrackBack URL


Leave a Reply

Powered by WordPress | Theme: Aeros 2.0 by TheBuckmaker.com