Tengo un problema que arrastro desde años y ahora que estoy renovando toda mi librería querría arreglar, os lo comento.
Tengo un registro guardado en una tabla de mysql con cotejamiento en "utf-8 unicode" que es "Título" escrito tal cual veis, entro en el phpmyadmin y veo que está guardado así, sin entities ni caracteres extraños.
Ahora he creado un documento superbásico solo con este código:
Código PHP:
<?php
// $link = conexión a bases de datos;
$res_texto = mysql_query ("SELECT titulo FROM blog WHERE (id_blog = 1)");
$titulo = mysql_result($res_texto, 0, "titulo");
echo "Encode: ".utf8_encode($titulo)."<br> \n";
echo "Decode: ".utf8_decode($titulo)."<br> \n";
echo "Nada: ".$titulo."<br> \n";
?>
Haciendo esta pequeña prueba el navegador me devuelve:
Código:
Encode: Título
Decode: T?lo
Nada: Tlo
Y si miro el código fuente aparece esto:
Código:
Encode: TÃ*tulo<br>
Decode: T?lo<br>
Nada: Título<br>
¿Por que pasa esto? ¿Cual es el problema? No debería salir perfectamente la palabra "Título" en el navegador sin aplicar ninguna transformación encode? Y sin embargo si miro el código fuente si aparece la palabra "Título" perfectamente escrita sin ninguna transformación, pero luego en el navegador se ve mal. Os agradecería muchisimo que alguien me explique por que pasa esto.
P.D: si al documento este en cuestión le añado las cabeceras:
Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
o
Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
No hay ninguna diferencia en los resultados, todo sale igual sin cabecera o con cualquiera de las dos anteriores.
Si cambio el encoding del propio archivo de utf-8 a Europero occidental tampoco hay ninguna diferencia