Problemas con la ‘ñ’ u otros caracteres especiales en PHP

Si estamos construyendo nuestra propia aplicación PHP o si usamos un CMS (Content Management System o Sistema de Manejo de Contenido) como WordPress, Joomla, Drupal, etc.., puede darse el caso de que mostrar datos previamente procesados por algún tipo de limpiador de String (para evitar inyecciones de código), no nos muestre correctamente ni las ‘ñ’ ni los acentos.

Para corregir esto y primero de todo, deberemos cerciorarnos de que nuestro sistema de representación de caracteres sea UTF-8, para que todos los símbolos de los lenguajes derivados del latín sean reconocidos. Deberemos escribir al inicio <meta chartset=”utf-8″ />” y comprobar que la base de datos también esté usando este sistema.

Una vez comprobado esto si continúan los problemas, hay que revisar el contenido del script, como hemos comentado al principio, buscando funciones anti-inyecciones de código del tipo:


$string = strip_tags($string);
$string = htmlentities($string);
return stripslashes($string);

El problema puede estar en la función es htmlentities(), que realiza una conversión de la string y la deja sin ‘ñ’ ni acentos, por esta razón algunas veces vemos sitios que usan CMS  y tiene problemas con estos caracteres sólo en algunas secciones del sitio (donde se llama a esta función).

La solución seria:

$string = htmlentities($string, ENT_QUOTES,’UTF-8′);

A la función es htmlentities() se le pueden pasar como argumento opcional (charset) el conjunto de carácteres usado para la conversión, en nuestro caso UTF-8.

Puedes consultar la ayuda que nos ofrece php.net sobre esta función pulsando aqui.

Facebooktwittergoogle_plus