Solucionar poblemas con tildes en html/php + utf8?

Germán Poó Caamaño gpoo en ubiobio.cl
Vie Oct 28 11:12:30 CLST 2005


El jue, 27-10-2005 a las 23:20 -0300, Enrique Place escribió:
> Tengo un equipo de desarrollo con Fedora C4, y un servidor SuSE 8.
> Desarrollo páginas con html y tildes directos, y cuando paso al
> servidor los tildes son sustituidos por caracteres "basura".
> 
> Esta es la primera vez que me pasa, puesto que antes usaba RH9 que
> tiene UTF8 y todo funcionaba correctamente.
> 
> Las diferencias que encontré en los fuentes viejos y nuevos es que si
> corro un "file archivo.php" me dice que los servidores tienen fuentes
> en formato ascii, y los de mi entorno de desarrollo UTF8.
> 
> Hay forma de cambiar el "formato" de utf8 a ascii, para no perder los
> tildes (así están funcionando en los servidores, y son muchos fuentes
> para cambiar a mano)?

Si te refiereas a ASCII puro (7-bits), tendrías que convertirlo
a entidades HTML.  

Lo que puedes hacer es pasar todo a entidades HTML.  Para ello puedes
utilizar el siguiente script en Python:

---------------------------------------------------------------------
#!/usr/bin/env python

import sys
import htmlentitydefs

def encode(data):
    return unicode(data,"utf-8").encode("iso8859-15",
"xmlcharrefreplace")

def text_to_entities(oldtext):
    newtext = ""
    for ch in oldtext:
        c = ord (ch)
        if c > 0x7F:
            newtext += '&' + htmlentitydefs.codepoint2name[c] + ';'
        else:
            newtext += ch
    return newtext

print text_to_entities(encode(sys.stdin.read()))
---------------------------------------------------------------------

Esto asume que tienes el texto en UTF-8; y hay que tener cuidado
porque read() lee todo de una vez; pero para archivos corrientes
puede ser útil.

Lo otro puede ser convertirlos al juego de caracteres latin1
(ISO-8859-1).

En este último caso, puedes usar recode:

$ msgconv --from UTF-8 --to ISO-8859-1 archivo

La tercera alternativa es configurar tu servidor apache para
que:
a. Informe el juego de caracteres correcto predeterminado; *o*
b. No entregue juegos de caracteres predeterminado.

La gracia de la primera alternativa, es que si le pides a Google
que lo traduzca, lo puede hacer razonablemente.  Cuando el texto
está en ISO-8859-1, las palabras acentuadas no las traduce y 
adquiere un tono "Yo Tarzán; Tú Jane".

-- 
Germán Poó Caamaño
http://www.ubiobio.cl/~gpoo/



Más información sobre la lista de distribución Linux