Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/12/2007, 09:09
Avatar de PosProdukcion
PosProdukcion
 
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 20 años, 5 meses
Puntos: 9
Re: Función para transformar HTML Entities

Pues me temo que no funciona ni lo uno ni lo otro...

HTMLEncode funciona mal con UTF-8 (ver esto), mi sistema, que lleva 3 meses de desarrollo está en UTF-8, ahora quiero incluir algunos textos en el newsletter, cuya versión html se abre sin problemas en todos los navegadores, pero al enviarla por correo, los servidores de mail (o los clientes, o quien sea que meta mano en el camino) me destrozan los caracteres especiales, y llamamos "especiales" a todos aquellos que no forman parte del reducido alfabeto anglo-sajón,

me da igual poner charset=utf-8 o charset=iso-8859-1, y eso que antes he transformado a mano todos esos caracteres, al final me he hecho esta función:

Código:
    Function quitaEntities(texto)
            texto = Replace(texto, "¡", "¡")
            texto = Replace(texto, "¿", "&iquest;") '<- Esta no funciona

            texto = Replace(texto, "á", "&aacute;")
            texto = Replace(texto, "é", "&eacute;")
            texto = Replace(texto, "í", "&iacute;")
            texto = Replace(texto, "ó", "&oacute;")
            texto = Replace(texto, "ú", "&uacute;")
            texto = Replace(texto, "ñ", "&ntilde;")
            texto = Replace(texto, "Ç", "&ccedil;")

            texto = Replace(texto, "Á", "&Aacute;")
            texto = Replace(texto, "É", "&Eacute;")
            texto = Replace(texto, "Í", "&Iacute;")
            texto = Replace(texto, "Ó", "&Oacute;")
            texto = Replace(texto, "Ú", "&Uacute;")
            texto = Replace(texto, "Ñ", "&Ntilde;")
            texto = Replace(texto, "Ç", "&Ccedil;")

            texto = Replace(texto, "à", "&agrave;")
            texto = Replace(texto, "è", "&egrave;")
            texto = Replace(texto, "ì", "&igrave;")
            texto = Replace(texto, "ò", "&ograve;")
            texto = Replace(texto, "ù", "&ugrave;")

            texto = Replace(texto, "À", "&Agrave;")
            texto = Replace(texto, "È", "&Egrave;")
            texto = Replace(texto, "Ì", "&Igrave;")
            texto = Replace(texto, "Ò", "&Ograve;")
            texto = Replace(texto, "Ù", "&Ugrave;")

            texto = Replace(texto, "ä", "&auml;")
            texto = Replace(texto, "ë", "&euml;")
            texto = Replace(texto, "ï", "&iuml;")
            texto = Replace(texto, "ö", "&ouml;")
            texto = Replace(texto, "ü", "&uuml;")

            texto = Replace(texto, "Ä", "&Auml;")
            texto = Replace(texto, "Ë", "&Euml;")
            texto = Replace(texto, "Ï", "&Iuml;")
            texto = Replace(texto, "Ö", "&Ouml;")
            texto = Replace(texto, "Ü", "&Uuml;")

            texto = Replace(texto, "â", "&acirc;")
            texto = Replace(texto, "ê", "&ecirc;")
            texto = Replace(texto, "î", "&icirc;")
            texto = Replace(texto, "ô", "&ocirc;")
            texto = Replace(texto, "û", "&ucirc;")

            texto = Replace(texto, "Â", "&Acirc;")
            texto = Replace(texto, "Ê", "&Ecirc;")
            texto = Replace(texto, "Î", "&Icirc;")
            texto = Replace(texto, "Ô", "&Ocirc;")
            texto = Replace(texto, "Û", "&Ucirc;")

        quitaEntities = texto
    End Function
Problemas: esta no me funciona: texto = Replace(texto, "¿", "&iquest;"), y no puedo reemaplzar las comillas (") ni el ampersand (&) porque puede haber links u otro código html dentro del contenido (aunque eso ya lo solucioné parseando el taxto a la hora de guardar los datos)

O sea, que todo el texto que guardo en mi BD tengo que pre-procesarlo con funciones propias, ¿que pasaría si mi BD fuera multi-entorno? Pues que los clientes que no fueran web no verían una m****...

Al final, ni utf-8 ni nada, los caracteres "especiales" se interpretan de manera diferente en la BD, en el servidor web, en el navegador y ahora resulta que también en los mails. En javascript ya he renunciado a usar tildes, eñes e interrogantes de apertura, porque a veces las muestra y a veces no , para esto no he encontrado solución y he encontrado más gente con el problema, así que al menos sé que no soy el único

Así que hasta que a los desarrolladores de estandars les de por acordarse de que existe un mundo de alfabetos no anglosajones y comprueben lo difícil que es trabajar en diferentes entornos con estos, creo que tendremos que apañarnos con este sistema infernal

¿¿¿Se nota que estoy harto de la codificación??? Lo siento, pero llevo con este problema desde que comenzó el proyecto y niguna solución resulta ser 100% válida, siampre acabo encontrando algún nuevo problema

Saludos