Foros del Web » Programando para Internet » PHP »

PHP OO Pasar de ANSI a UTF-8 para multilanguage (y no morír en el intento!)

Estas en el tema de Pasar de ANSI a UTF-8 para multilanguage (y no morír en el intento!) en el foro de PHP en Foros del Web. Hola a todos, El otro día estaba experimentando de manera local para implementar una futura traducción. Noté varias cosas sobre las codificaciones y es que ...
  #1 (permalink)  
Antiguo 08/07/2014, 06:59
 
Fecha de Ingreso: abril-2010
Ubicación: Ping: BSAS - Arg
Mensajes: 791
Antigüedad: 14 años
Puntos: 25
Pasar de ANSI a UTF-8 para multilanguage (y no morír en el intento!)

Hola a todos,

El otro día estaba experimentando de manera local para implementar una futura traducción. Noté varias cosas sobre las codificaciones y es que por ejemplo, por defecto mi codificación siempre fué ANSI, en cambio, para poner más de 40 idiomas, tendré que recurrir a UTF-8.

Cambié el formato del .php a UTF-8 y fué un desastre, casi todos los comentario se trucaron, particularmente los carácteres especiales y todo dejó de funcionar como normalmente lo hacía.

Quería pedir sugerencias y consideraciones sobre el tema. Esto de la codificación siempre me fué un dolor de cabeza.

PD: Para plasmar los 40 idiomas voy a usar constantes en array ya que el texto es muy chico, pero luego lo paso a un include por separado.

Gracias,
Denis.
  #2 (permalink)  
Antiguo 08/07/2014, 07:28
Avatar de oMega_2093  
Fecha de Ingreso: julio-2014
Ubicación: León, España
Mensajes: 3
Antigüedad: 9 años, 9 meses
Puntos: 1
Respuesta: Pasar de ANSI a UTF-8 para multilanguage (y no morír en el intento!)

Hola,

Hay muchos puntos en los que debes especificar codificación UTF-8, no sólo en los ficheros PHP. Para convertir un fichero a otra codificación yo utilizo Notepad++, que convierte de ANSI a UTF-8 (sin BOM) sin perder los caracacteres especiales.

Pero eso por sí sólo no es suficiente. Tienes que especificar UTF-8 también en el HTML con la metaetiqueta correspondiente. También en el servidor de base de datos, si lo hubiera: cada campo tiene su opción de juego de caracteres, cada tabla, y cada conexión... Desde PHP mírate http://www.php.net/manual/es/function.mysql-set-charset.php . Por último se me ocurre también enviar un cabecero (http://es1.php.net/manual/es/function.header.php) indicando que es UTF-8.

El servidor web también tiene que servir UTF-8. Por defecto Apache (al menos en Debian) no sobreescribe la codificación, pero si se ha cambiado ese ajuste puede estar haciéndolo, indiques lo que indiques en tus ficheros o cabeceros.

Recuerda utilizar la opción de Notepad++ de CONVERTIR EN... en lugar de la CODIFICAR EN..., porque la primera convierte los caracteres especiales de una codificación a otra y los mantiene, y la otra no lo hace y al cambiar la codificación los destruye.

Saludos.
  #3 (permalink)  
Antiguo 08/07/2014, 07:34
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Pasar de ANSI a UTF-8 para multilanguage (y no morír en el intento!)

Cita:
Iniciado por dezagus Ver Mensaje
Hola a todos,

El otro día estaba experimentando de manera local para implementar una futura traducción. Noté varias cosas sobre las codificaciones y es que por ejemplo, por defecto mi codificación siempre fué ANSI, en cambio, para poner más de 40 idiomas, tendré que recurrir a UTF-8.

Cambié el formato del .php a UTF-8 y fué un desastre, casi todos los comentario se trucaron, particularmente los carácteres especiales y todo dejó de funcionar como normalmente lo hacía.

Quería pedir sugerencias y consideraciones sobre el tema. Esto de la codificación siempre me fué un dolor de cabeza.

PD: Para plasmar los 40 idiomas voy a usar constantes en array ya que el texto es muy chico, pero luego lo paso a un include por separado.

Gracias,
Denis.
Te aconsejo que revises estos articulos para conocer que debes de tener en cuenta: http://www.phptherightway.com/#php_and_utf8
https://phpbestpractices.org/#utf-8
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #4 (permalink)  
Antiguo 08/07/2014, 15:58
 
Fecha de Ingreso: abril-2010
Ubicación: Ping: BSAS - Arg
Mensajes: 791
Antigüedad: 14 años
Puntos: 25
Respuesta: Pasar de ANSI a UTF-8 para multilanguage (y no morír en el intento!)

Cita:
Iniciado por oMega_2093 Ver Mensaje
Hola,

Hay muchos puntos en los que debes especificar codificación UTF-8, no sólo en los ficheros PHP. Para convertir un fichero a otra codificación yo utilizo Notepad++, que convierte de ANSI a UTF-8 (sin BOM) sin perder los caracacteres especiales.

Pero eso por sí sólo no es suficiente. Tienes que especificar UTF-8 también en el HTML con la metaetiqueta correspondiente. También en el servidor de base de datos, si lo hubiera: cada campo tiene su opción de juego de caracteres, cada tabla, y cada conexión... Desde PHP mírate http://www.php.net/manual/es/functio...et-charset.php . Por último se me ocurre también enviar un cabecero (http://es1.php.net/manual/es/function.header.php) indicando que es UTF-8.

El servidor web también tiene que servir UTF-8. Por defecto Apache (al menos en Debian) no sobreescribe la codificación, pero si se ha cambiado ese ajuste puede estar haciéndolo, indiques lo que indiques en tus ficheros o cabeceros.

Recuerda utilizar la opción de Notepad++ de CONVERTIR EN... en lugar de la CODIFICAR EN..., porque la primera convierte los caracteres especiales de una codificación a otra y los mantiene, y la otra no lo hace y al cambiar la codificación los destruye.

Saludos.
Suena bastante complicado en relación a riezgo / beneficio. ¿Existe alguna manera de plasmar carácteres especiales en constantes usando ANSI tanto en PHP como en el meta?

Es muy poco el texto que tengo que traducir, PERO, el problema es que es un servicio de alta disponibilidad, y por lo que cuentas, SUENA a que realmente saldrá desastroso a menos que lo haga en fases y en un entorno sumamente controlado (localhost) y luego pasar a trabajo.

Gracias por tu data! Casi me diste un "step by step" (Y)
  #5 (permalink)  
Antiguo 08/07/2014, 15:59
 
Fecha de Ingreso: abril-2010
Ubicación: Ping: BSAS - Arg
Mensajes: 791
Antigüedad: 14 años
Puntos: 25
Respuesta: Pasar de ANSI a UTF-8 para multilanguage (y no morír en el intento!)

Cita:
Iniciado por hhs Ver Mensaje
Te aconsejo que revises estos articulos para conocer que debes de tener en cuenta: http://www.phptherightway.com/#php_and_utf8
https://phpbestpractices.org/#utf-8
Estoy leyendo, mil gracias :)
  #6 (permalink)  
Antiguo 09/07/2014, 23:06
 
Fecha de Ingreso: abril-2010
Ubicación: Ping: BSAS - Arg
Mensajes: 791
Antigüedad: 14 años
Puntos: 25
Respuesta: Pasar de ANSI a UTF-8 para multilanguage (y no morír en el intento!)

Cita:
Iniciado por dezagus Ver Mensaje
Suena bastante complicado en relación a riezgo / beneficio. ¿Existe alguna manera de plasmar carácteres especiales en constantes usando ANSI tanto en PHP como en el meta?
Alguna idea respecto a esto?

Mil Gracias!
  #7 (permalink)  
Antiguo 10/07/2014, 07:36
Avatar de oMega_2093  
Fecha de Ingreso: julio-2014
Ubicación: León, España
Mensajes: 3
Antigüedad: 9 años, 9 meses
Puntos: 1
Respuesta: Pasar de ANSI a UTF-8 para multilanguage (y no morír en el intento!)

Aquí tienes un listado, mediante HTML Entities: http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

Pero sabes que eso es pan para hoy, y hambre para mañana ;) entiendo lo que comentas del riesgo. ¿Por qué no intentas crear un entorno paralelo (duplica el website) dentro del servidor y vas haciendo pruebas? Son una serie de cosas que hay que comprobar, pero la más destructiva es cambiar la codificación de los ficheros ya que puedes destruir información, cosa que cambiando el default charset de Apache no sucede, por ejemplo.

Al final creo que lo ideal es tener todo en UTF-8. En la empresa donde estoy ahora recurrían a HTML Entities y ahora ya no puede ser (un CMS que usamos reemplaza las & de las entities)... Imagina: migrar bases de datos a UTF-8, ficheros de traducciones que ya no sirven y que en algunos casos han quedado rotos al convertir mal... Un desastre.

Siempre habrá riesgo, pero minimiza las pérdidas: haz un resguardo de los ficheros que es lo más sensible y luego ve paso a paso. Solucionarlo con fixes como las HTML Entities creo que es otro riesgo en si mismo ;)
  #8 (permalink)  
Antiguo 12/07/2014, 12:24
 
Fecha de Ingreso: abril-2010
Ubicación: Ping: BSAS - Arg
Mensajes: 791
Antigüedad: 14 años
Puntos: 25
Respuesta: Pasar de ANSI a UTF-8 para multilanguage (y no morír en el intento!)

Cita:
Iniciado por oMega_2093 Ver Mensaje
Aquí tienes un listado, mediante HTML Entities: http://en.wikipedia.org/wiki/List_of...ity_references

Pero sabes que eso es pan para hoy, y hambre para mañana ;) entiendo lo que comentas del riesgo. ¿Por qué no intentas crear un entorno paralelo (duplica el website) dentro del servidor y vas haciendo pruebas? Son una serie de cosas que hay que comprobar, pero la más destructiva es cambiar la codificación de los ficheros ya que puedes destruir información, cosa que cambiando el default charset de Apache no sucede, por ejemplo.

Al final creo que lo ideal es tener todo en UTF-8. En la empresa donde estoy ahora recurrían a HTML Entities y ahora ya no puede ser (un CMS que usamos reemplaza las & de las entities)... Imagina: migrar bases de datos a UTF-8, ficheros de traducciones que ya no sirven y que en algunos casos han quedado rotos al convertir mal... Un desastre.

Siempre habrá riesgo, pero minimiza las pérdidas: haz un resguardo de los ficheros que es lo más sensible y luego ve paso a paso. Solucionarlo con fixes como las HTML Entities creo que es otro riesgo en si mismo ;)
Tienes razón, la relación beneficio largoplacista y la inversión de tiempo lo vale. Lástima que creí que sería más rápido. Y es así como dices, cuando cambié de coficación corrompí el archivo, por suerte tenía un backup a mano (buena costumbre).

Mil gracias por aclarar y particularmente hacer que no me sienta un tonto con esto hahahah! Es más complicado de lo que parece.

Etiquetas: ansi, utf-8
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:47.