HtmlEncode y HtmlDecode

Como en muchas otras cosas, ASP.NET nos los vuelve a poner muy fácil.
En muchas ocasiones podemos estar interesados en mostrar datos con código HTML, pero sin que el código HTML haga su función. Por ejemplo, no nos interesaría que un usuario malintencionado inyectara en nuestro foro cierto código javascript. O por ejemplo queremos mostrar "<b>texto en negrita</b>" en lugar de "texto en negrita".

Con ASP.NET, esto es muy sencillo sin más que utilizar HtmlEncode y HtmlDecode.

Resulta obvio, pero HtmlEncode codifica el código html. Por ejemplo, pasa de '<' a '&lt;', mientras que HtmlDecode hace lo contrario.

Y su uso en ASP.NET es trivial:

    string text = "<b>Mi texto en negrita</b>";
    string textEncoded =  HttpUtility.HtmlEncode(text);
    string textDecoded = HttpUtility.HtmlDecode(textEncoded);


Donde textEncoded valdrá "&lt;b&gt;Mi texto en negrita&lt;/b&gt;" y textDecoded volverá a valer lo mismo que el texto original.

Y ya que sabemos como usarlo, yo aconsejaría que siempre, en todo caso, que recibamos texto de usuarios desconocidos (por ejemplo de un foro de una de nuestras webs) hagamos un HtmlEncode antes de mostrarlo, para evitar inyecciones de HTML indeseadas (negritas sin cerrar, tablas, javascript, flash...), y si queremos permitir algún tipo de HTML, hacerlo tras haber hecho dicho HtmlEncode.

Por ejemplo, para evitar todo el HMTL excepto la negrita, haríamos:

    string text = "<b>Mi texto en negrita</b>";
   
text text.Replace(HttpUtility.HtmlEncode("<b>"), "<b>");