DataSet y HTMLDecodeUn breve ejemplo de como utilizar HTMLDecode para hacer Binding
Fecha: 26/Feb/2006 (22-02-06)
|
Introducción
Un saludo a todos, para comenzar les voy a comentar que uno de los principales problemas que he tenido a la hora de hacer un formulario web es evitar la inyección de código a través de las cajas de texto que debe llenar el usuario, para esto he tenido que recurrir a muchos trucos como script del lado del cliente y validaciones del lado del servidor una de las validaciones mas cómodas y mas seguras es Server.HTMLEncode que transforma los caracteres especiales en html, que luego va a ser perfectamente legible por los navegadores, con esta brillante solución se nos presenta un pequeño problema, ahora en la base de datos tenemos almacenados frases como “Rómulo Gallegos”, “Antonio José de Sucre” ; “Centro Gráfico de Tecnología” y si alguno de ustedes a hecho un bind a dropdownlist de esta data sabe que aparece tal como esta en la base de datos, “de verdad que no es muy estético para los usuarios finales”.
Para esto les presento dos soluciones en este articulo, la primera es “Elimina todos los caracteres especiales, no dejes al usuario utilizar acentos, comillas o nada de lo que pueda afectar tu base de datos ó tu sistema” y la segunda para los que no tenemos mas remedio que trabajar con el problema es implementar una clase que transforme los datatable sucios o que contienen html en datatable limpios listos para el bind, A continuación les presento el codigo en C#.
using System; using System.Data; using System.Web; using System.Collections; namespace Datos { /// <summary> /// En esta clase se encuentran funciones utiles para el manejo /// de los registros de la base de datos /// </summary> public class Utils { public Utils() { } /// <summary> /// Funcion para retornar un DataTable que este limpio de caracteres especiales /// </summary> /// <param name="otbl">DataTable que se quiere limpiar</param> /// <returns>DataTable</returns> public static DataTable HTMLDecodeDataTable(DataTable otbl) { DataTable tmp = new DataTable(); //Copio la estructura de la tabla //original a una tabla temporal tmp = otbl.Clone(); DataRow DecodeRow; //Ciclo para recorrer cada una de las filas for (int i = 0; i < otbl.Rows.Count; i++ ) { //Creo la nueva fila que sera insertada en la tabla limpia DecodeRow = tmp.NewRow(); //Ciclo para recorrer cada una de las columnas for (int j = 0; j < otbl.Columns.Count; j++) { //Limpio los valores de los campos y los coloco en la nueva fila DecodeRow[j] = HttpUtility.HtmlDecode(otbl.Rows[i][j].ToString()); } //Inserto la nueva fila tmp.Rows.Add(DecodeRow); } //Retorno la tabla limpia return tmp; } } }
Para la implementación de la clase:
Debido a que la clase es estática no hace falta instanciarla solo se debe pasar el datatable que queremos limpiar y listo!
Sinceramente espero que les sea de utilidad, como lo ha sido para mi, Saludos.
Espacios de nombres usados en el código de este artículo:
System;
System.Data;
System.Web;
System.Collections;
Fichero con el código de ejemplo: rafaelje_HTMLDecode.zip - 815 bytes
(MD5 checksum: 803B1C581DFABECFE0E34DFD2BC5C93B)