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