Inicio > General, PHP, Programación > Caracteres especiales del HTML en PHP

Caracteres especiales del HTML en PHP

Quiero compartir con ustedes una grandiosa función que convierte los Caracteres especiales del html con php, es muy afectiva y sencilla, hace mucho tiempo la implemente en un Lector de RSS que dejaré en el blog en un tiempo, bueno cuando lo consiga en mi Directorio de recursos, bien, antes que todo explicaré detalladamente algunas cosas y luego el código.

Lo bueno de este script que vamos a comentar es que está creado haciendo uso de algunas funciones que trae PHP de casa, con lo cual, no tenemos por qué conocer la lista completa de los caracteres especiales. Simplemente utilizaremos algunas funciones interesantes del lenguaje.

Funciones de PHP para hacer traducción de caracteres especiales

En PHP existen varias funciones para cambiar caracteres por sus códigos especiales, pero ninguna de las funciones hace el trabajo justamente como deseaba. Primero veamos dichas funciones:

htmlentities(): esta función transforma todos los caracteres de un texto que tienen conversión a caracteres especiales. Esto incluye desde los acentos o la eñe a los mayores y menores qué, las comillas, etc.

htmlspecialchars(): esta función convierte sólo los caracteres especiales que pueden afectar a las etiquetas HTML, como mayor y menor qué, comillas simples y dobles y el carácter &.

Veamos el código PHP de la función:

function convertir_especiales_html($str){
if (!isset($GLOBALS["carateres_latinos"])){
$todas = get_html_translation_table(HTML_ENTITIES, ENT_NOQUOTES);
$etiquetas = get_html_translation_table(HTML_SPECIALCHARS, ENT_NOQUOTES);
$GLOBALS["carateres_latinos"] = array_diff($todas, $etiquetas);
}
$str = strtr($str, $GLOBALS["carateres_latinos"]);
return $str;
}
 

Lo que hace la función, en líneas generales, es crear un array asociativo, con todos los caracteres que se desean convertir y su correspondiente carácter especial HTML. Luego se utiliza la función strtr para cambiar en un string todas los caracteres del array creado anteriormente.

Para obtener el array asociativo con todos los caracteres (en realidad sólo los que se traducen en códigos especiales) y sus correspondientes caracteres especiales, podríamos hacerlo a mano, definiendo por nosotros mismos la variable del array e insertando cada uno de los items. Pero en este ejemplo se utiliza otra función de PHP:

get_html_translation_table(): Esta función devuelve un array asociativo que se usa en las funciones htmlspecialchars() y htmlentities() para convertir esos caracteres. Recibe dos parámetros, aunque el segundo es opcional. El primer parámetro es una constante HTML_ENTITIES o HTML_SPECIALCHARS, para conseguir el array asociativo que utilizan cada una de esas funciones. El segundo parámetro sirve para indicar el estilo de comillas que se desea obtener en el array. Con la constante ENT_NOQUOTES indicamos que no ponga en el array las comillas simples ni las dobles.

Así pues, con las líneas:

$todas = get_html_translation_table(HTML_ENTITIES, ENT_NOQUOTES);
$etiquetas = get_html_translation_table(HTML_SPECIALCHARS, ENT_NOQUOTES);
 

Conseguimos dos arrays, uno con todos los caracteres HTML y otro con sólo los caracteres que afectan a las etiquetas. Luego, haciendo la diferencia de el primer array menos el segundo obtendremos el array con todos los caracteres que nos interesan.

Lo que veis de $GLOBALS[“carateres_latinos”], sirve para meter en una variable global ese array y luego no tener que volver a generarlo las sucesivas veces que se llama a la función.

Por último utilizamos la mencionada función srttr() para hacer la traducción de los caracteres contenidos en el array.

Una llamada a esta función como esta:

convertir_especiales_html('<p align="center">La ejecución de esta función sirve para <b>convertir caracteres especiales con PHP</b> sin tocar las etiquetas. <br>Parece que funcionó!</p>');
 

Devolvería un texto como el siguiente:

<p align="center">La ejecuci&oacute;n de esta funci&oacute;n sirve para <b>convertir caracteres especiales con PHP</b> sin tocar las etiquetas. <br>Parece que funcion&oacute;!</p>
 

Espero pueda servirles de mucho este artículo, es muy útil más que todo en lectores de RSS, pero eso queda a criterio de su implementación.

Aclaro que la función es un poco vulnerable, ya que requiere de un sistema de seguridad XSS, requiere filtrar las etiquetas, puedes visitar XSS – Cross Site Scripting.

Más Información

Categorías:General, PHP, Programación Etiquetas: ,
  1. donals
    1 octubre, 2011 a las 17:09

    Excelente artículo

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: