El blog de Iván Argulo

Cambio en la función htmlentities() en PHP 5.4

Un cambio reciente en la función htmlentities(), en concreto a partir de la versión de PHP 5.4, hace que código antiguo que utilice una codificación de caracteres diferente de UTF8 no funcione correctamente.

La función de PHP htmlentities() recibe como primer parámetro una cadena de texto, y convierte todos los caracteres especiales (letras acentuadas, nuestra querida letra "eñe" y otros muchos) a sus correspondientes entidades HTML. La función admite también otros parámetros, en concreto:

  • flags: permite especificar cómo manejar las comillas, tipo de documento utilizado, etc.
  • encoding: establece la codificación usada en la conversión.
  • double_encode: si está activado (por defecto lo está), las entidades encontradas se vuelven a codificar de nuevo. Así, por ejemplo, la entidad ñ se convertirá en ñ

Puedes ver la referencia completa de esta función en php.net

Por qué htmlentities() no funciona en PHP 5.4

Hay que resaltar que htmlentities() no funciona correctamente en código antiguo si se usa una codificación distinta de UTF8.

En concreto, el problema se debe al parámetro encoding. En versiones de PHP anteriores a la 5.4, el valor predeterminado era ISO-8859-1. Eso hacía que muchas páginas codificadas en ISO omitieran ese parámetro en la llamada a la función.

Pues bien, en versiones de PHP posteriores a la 5.4, incluida, el parámetro encoding ha cambiado su valor por defecto, pasando a ser UTF8. Debido a esto, si el código antiguo es utilizado con una versión más reciente de PHP la función no devuelve ningún valor, dando como resultado una cadena vacía.

Es importante tener en cuenta esto al realizar migraciones en el servidor. Es necesario hacer una revisión completa del código si se producen cambios en la versión de PHP del servidor.