martes, 25 de febrero de 2014

Mostrar caracteres latinos y evitar caracteres extraños con PHP


Bienvenid@s, a veces se dá la situación en el que de un momento a otro el texto mostrado en el body muestra unos caracteres extraños, nada agradables para el visitante web, ocupando los espacios en los cuales deberían ir las vocales con tildes o otros caracteres como pueden ser las ñ Ñ, a veces, esto ocurre al realizar consultas a una base de datos, ya que el tipo de codificación de la misma es distinta de la que estamos usando en el documento.

Para solventar este problema lo primero que tenemos que cersiorarnos es del tipo de codificación que estamos utilizando en el head del documento, por lo general, los más utilizados son ...

UTF-8
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

ISO-8859-1
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

Al probar uno de los dos, por lo general debe mostrarte los caracteres correctamente, si sigues con el error, comprueba en el editor de código que tu archivo está siendo codificado en el tipo ANSI o UTF-8, por lo general, en mi caso que uso notepad++, esto lo puedo comprobar en el menú superior haciendo click en la opción Codificación, con ANSI e indicando en el HEAD el tipo ISO-8859-1 se muestran los caracteres correctamente.

Si el problema proviene de la base de datos, pueden probar a cambiar el tipo de codificación de la misma.

Aunque si ya no sabéis como solucionar el problema y sobre todo cuando realizáis consultas a la base de datos os sigue mostrando caracteres extraños, aquí os dejo una función PHP, que os va a reemplazar las vocales con tildes y las ñÑ, por su respectivas entidades HTML ...



function latin($string)
{
$buscar = array(
'á', 
'é', 
'í', 
'ó', 
'ú', 
'Á', 
'É', 
'Í', 
'Ó', 
'Ú', 
'à', 
'è', 
'ì', 
'ò', 
'ù', 
'À', 
'È', 
'Ì', 
'Ò', 
'Ù', 
'ä',
'ë',
'ï',
'ö',
'ü',
'Ä',
'Ë',
'Ï',
'Ö',
'Ü',
'ñ',
'Ñ',
);
$reemplazar = array(
'&aacute;', 
'&eacute;', 
'&iacute;', 
'&oacute;', 
'&uacute;',
'&Aacute;', 
'&Eacute;', 
'&Iacute;', 
'&Oacute;', 
'&Uacute;',
'&agrave;',
'&egrave;',
'&igrave;',
'&ograve;',
'&ugrave;',
'&Agrave;',
'&Egrave;',
'&Igrave;',
'&Ograve;',
'&Ugrave;',
'&auml;',
'&euml;',
'&iuml;',
'&ouml;',
'&uuml;',
'&Auml;',
'&Euml;',
'&Iuml;',
'&Ouml;',
'&Uuml;',
'&ntilde;',
'&Ntilde;',
);

return $string = str_replace($buscar, $reemplazar, $string);
}
$latin = "áéíóú àèìòù ñ Ñ ë ï ö Á É ÌÒÙ ËËÏÄ";
echo latin($latin);


1 comentario:

3rn3st0 dijo...

Yo hago uso de la etiqueta <meta>
de la siguiente manera:
<meta charset="utf-8" />

Es más corto y sencillo que las etiquetas que sugieres y es la manera correcta según la especificación de HTML 5.

Como sea, la función que propones así como el tip es bien útil para quien se haya encontrado con estos problemas.