Foros del Web » Programando para Internet » PHP »

Codificación UTF-8

Estas en el tema de Codificación UTF-8 en el foro de PHP en Foros del Web. Hola a todos. Me estoy enfrentando al problema de la codificación UTF-8. Después de mucho leer, he llegado a la conclusión que lo mejor es ...
  #1 (permalink)  
Antiguo 03/08/2011, 15:53
 
Fecha de Ingreso: febrero-2011
Mensajes: 156
Antigüedad: 10 años, 5 meses
Puntos: 4
Codificación UTF-8

Hola a todos. Me estoy enfrentando al problema de la codificación UTF-8. Después de mucho leer, he llegado a la conclusión que lo mejor es pasar toda la aplicación web a esta codificación. Pues bien, estoy en la parte a priori más sencilla. Y sería, para cada una de mis páginas PHP:

1º incluyo el header header ('Content-type: text/html; charset=utf-8');
2º dentro del <head> inlcuyo <meta http-equiv="Content-Type" content="text/html; charset="utf-8" />

Vale. Ahora ejecuto una web que sólo muestra contenido estático ( es decir, texto puesto a mano, ni base de datos ni nada ). Antes de la modificaciones se veía bien. Y, despues la dos modificaciones que os comentaba, se ve mal. Consultando por ahí, dicen que las páginas .PHP DEBEN GRABARSE CON FORMATO UTF-8. Es decir, desde un editor de texto, hacer un "Guardar Como", y seleccionar el formato UTF-8. Vale, vuelvo a ejecutar y va perfecto. Peeeeero, ahora, a esta web le vinculo un php externo mediante "include". Evidentemente, a este php externo, le pongo el header ('Content-type: text/html; charset=utf-8'); Pues bien, en el momento que pongo el "include" pasa una cosa muy rara... y es que el contenido de la web principal que empezaba en la posición 0,0 se me desplaza hacia abajo!! El código de ejemplo sería este:

<?
header ('Content-type: text/html; charset=utf-8');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset="utf-8" />
<?
include("./php_externo.php");
?>
</head>
<body style="margin:0px;padding:0px">
<div style="background:red;">a</div>
</body>
</html>

donde "php_general.php", para descartar que tenga algo raro, tiene un código tan simple como este:

<?php
header ('Content-type: text/html; charset=utf-8');
function fun_aa()
{
echo 'aa';
}
?>

( a "fun_aa()" no la llama nadie )

Pues "<div style="background:red;">a</div>" se muestra en la posición 0,0 si no le pongo el include. En cambio, si se lo pongo, aparece desplazado hacia abajo.

Mis dudas son dos:
1º ¿¿¿Qué hago mal????
2º Para trabar con formato UTF-8 a todos los niveles en mi web, realmente debo guardar los fichero php con mi editor de texto, como UTF-8???

Otra cosa importate. Si no grabo el PHP como "UTF-8", entonces sí que funciona! Tanto con el include como sin él. Pero claro... si hago eso... entonces me aparecen lso caracteres raros.

Muchas gracas por vuestro tiempo y ayuda
  #2 (permalink)  
Antiguo 03/08/2011, 15:58
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 12 años, 3 meses
Puntos: 27
Respuesta: Codificación UTF-8

Bueno realmente no entiendo bien el problema
Si necesitas guardar acentos solo utiliza utf8_decode y para mostrar palabras en la web que tengan acentos utilizar utf8_encode....

Estas guardando datos en bases de datos?
  #3 (permalink)  
Antiguo 03/08/2011, 16:01
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 10 años
Puntos: 793
Respuesta: Codificación UTF-8

No se que tiene que ver esto con PHP pero tienes el meta está mal y no sé si el problema tuyo es por eso.

el charset es parte del content y no va entre comillas

Código HTML:
Ver original
  1. <meta http-equiv="Content-Type" content="text/html; charset="utf-8" />

Cambialo por:

Código HTML:
Ver original
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  #4 (permalink)  
Antiguo 03/08/2011, 16:04
 
Fecha de Ingreso: febrero-2011
Mensajes: 156
Antigüedad: 10 años, 5 meses
Puntos: 4
Respuesta: Codificación UTF-8

no, no... es un ejemplo muy simple. es una páina principal ( index ) con un texto fijo. Puesto a mano. A esta página ptrincipal le incluyo:
header ('Content-type: text/html; charset=utf-8');
<meta http-equiv="Content-Type" content="text/html; charset="utf-8" />
Y se ve mal. Entonces, el PHP lo guardo como "UTF-8" mediante mi editor de texto. Y entonces se ve bien. Pero, si a esa web principla le inluyo un "include", se produce el efecto que comentaba que se desplaza el contenido de la web.
Podría utilizar las funciones que comentas, pero en todos los foros que he ido, he llegado a al conclusión que lo mejor es dejar todo con la misma codificación tanto a nivel de Apache, MySql y PHP
  #5 (permalink)  
Antiguo 03/08/2011, 16:08
 
Fecha de Ingreso: febrero-2011
Mensajes: 156
Antigüedad: 10 años, 5 meses
Puntos: 4
Respuesta: Codificación UTF-8

Sí tienes razón, al hacer el copy-paste se me ha colao :) ya lo tenía como tú dices. No, no es por eso. Hombre!!! Tiene que ver con PHP totalmente! Las páginas son .PHP !! Y, este es un ejemplo simple para poder detectar dónde cometo el error. Pero posterioemente, estos PHP interactuarán con MySql etc... Trato de entender cómo codificar en utf-8 paginas en PHP
  #6 (permalink)  
Antiguo 03/08/2011, 16:12
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 10 años
Puntos: 793
Respuesta: Codificación UTF-8

Cita:
Iniciado por lemmy2011 Ver Mensaje
Sí tienes razón, al hacer el copy-paste se me ha colao :) ya lo tenía como tú dices. No, no es por eso. Hombre!!! Tiene que ver con PHP totalmente! Las páginas son .PHP !! Y, este es un ejemplo simple para poder detectar dónde cometo el error. Pero posterioemente, estos PHP interactuarán con MySql etc... Trato de entender cómo codificar en utf-8 paginas en PHP
Bueno y estas incluyendo un archivo en el head del documento, no va dentro del body ese contenido? Estas incluyendo además 2 veces el mismo header y tal vez se te corra por un error de PHP que no vez.
  #7 (permalink)  
Antiguo 03/08/2011, 16:21
 
Fecha de Ingreso: febrero-2011
Mensajes: 156
Antigüedad: 10 años, 5 meses
Puntos: 4
Respuesta: Codificación UTF-8

Bueno, en el ejmplo que os comento no. De hecho eso es lo sorprendente. Si os fijáis, el contenido de "php_externo" ( el php que incluyo en el <head> ) es totalmente irrelevante. Sólo tiene un función que no es llamada por nadie. Y lo curioso viene ahí, si no hago el include de "php_externo", la web se ve bien. Pero, si la incluyo, entonces la web aparece desplazada hacia abajo... Y otra cosa curiosa. Eso pasa, si los PHP ( el de la pagina orinal y el "php_externo" ) los cuadro con mi editor de texto como "UTF-8".
  #8 (permalink)  
Antiguo 03/08/2011, 16:45
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 10 años
Puntos: 793
Respuesta: Codificación UTF-8

Lee esto si no sabes inglés usa google. Al parecer es un problema de BOM (Byte Order Mark).

http://htmlpurifier.org/docs/enduser-utf8.html

Ambos archivos PHP debes guardarlos UTF8 sin BOM

Lee esto tambien

http://www.documentoweb.com/ISO-8859-1-y-UTF-8-Solucion-al-problema-de-codificacion-de-caracteres
  #9 (permalink)  
Antiguo 03/08/2011, 16:53
 
Fecha de Ingreso: febrero-2011
Mensajes: 156
Antigüedad: 10 años, 5 meses
Puntos: 4
Respuesta: Codificación UTF-8

Vale!! Genial!! Muchas gracias... voy a mirármelo y os cuento a ver qué tal!
  #10 (permalink)  
Antiguo 03/08/2011, 17:16
 
Fecha de Ingreso: febrero-2011
Mensajes: 156
Antigüedad: 10 años, 5 meses
Puntos: 4
Respuesta: Codificación UTF-8

G E N I A L!!!! Ha funcionado de maravilla!! No tenía ni idea del tema este del BOM... por lo visto es un bit que se coloca al principio de archivo para indicar qué tipo de codificación va a emplearse ( o algo así ). Comentan que esto da problemas, ya que aunque sea un bit "invisible" puede interferir en la correcta interpretación de la páginas web. Y que lo mejor es guardar siempre SIN BOM para evitar problemas... Gracias!! Muchas gracias, me has salvado el cuello! :D Ahora miraré de darte Karma, pero no sé qué pasa que por lo visto el Karma que reparto parece que no llega. Bueno, si no te llega, al menos te queda mi agradecimiento! :)

Etiquetas: html, 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 03:25.