Con el desarrollo de la extensión SEO Pack para BlogEngine me encontré con un inconveniente en el proceso de limpiar la string para la meta tag Descripción.
La actual función no hace bien el trabajo, aquí les muestro como esta ahora la función:
private static Regex _Regex = new Regex("<[^>]*>", RegexOptions.Compiled);
private static string StripHtml(string html)
{
if (string.IsNullOrEmpty(html))
return string.Empty;
html = _Regex.Replace(html, string.Empty);
html = html.Replace("\r", "");
html = html.Replace("\n", "");
return html;
}
- Lo primero que hago es crear un objeto Regex para el patrón <[^>]*>.
- La función StripHtml reemplaza todos los hallados de este patrón con un string vacio.
¿Que esta mal?
En este post no veremos como trabaja las expresiones regulares, pero debemos saber que lo que queremos que encuentre el patrón de matcheo sea todo el texto que este incluido entre los tags.
Pero.. ¿Que sucede con los tags que no se cierran? como por ejemplo <br>, <p>, <img>, etc? El patrón actual de matcheo no será capaz de encontrarlos.
Para solucionar esto nuestra función debería quedar así.
private static Regex _Regex = new Regex(@"<(.|\n)*?>", RegexOptions.Compiled);
private static string StripHtml(string html)
{
if (string.IsNullOrEmpty(html))
return string.Empty;
html = _Regex.Replace(html, string.Empty);
html = html.Replace("\r", "");
html = html.Replace("\n", "");
html = html.Replace("\t", "");
return html;
}