simplemente he intentado mi solución XElement.Parse. He creado un método de extensión de la clase string para que pueda volver a utilizar el código fácilmente:
public static bool ContainsXHTML(this string input)
{
try
{
XElement x = XElement.Parse("<wrapper>" + input + "</wrapper>");
return !(x.DescendantNodes().Count() == 1 && x.DescendantNodes().First().NodeType == XmlNodeType.Text);
}
catch (XmlException ex)
{
return true;
}
}
Un problema que encontré fue que signo texto plano y menos de caracteres provocan un XmlException e indican que el campo contiene HTML (que es incorrecto). Para solucionar esto, la cadena de entrada que se pasa primero debe tener los signos de unión y menos de caracteres convertidos a sus entidades XHTML equivalentes.Escribí otro método de extensión para hacer eso:
public static string ConvertXHTMLEntities(this string input)
{
// Convert all ampersands to the ampersand entity.
string output = input;
output = output.Replace("&", "amp_token");
output = output.Replace("&", "&");
output = output.Replace("amp_token", "&");
// Convert less than to the less than entity (without messing up tags).
output = output.Replace("< ", "< ");
return output;
}
Ahora puede tomar una cadena enviado por el usuario y comprobar que no contiene HTML usando el siguiente código:
bool ContainsHTML = UserEnteredString.ConvertXHTMLEntities().ContainsXHTML();
No estoy seguro si esto es a prueba de balas, pero creo que es lo suficientemente bueno para mi situación.
Para hacer esto, usted está probablemente va a tener que definir lo que entendemos por "HTML" y "texto plano", por ejemplo: ¿Va a permitir que alguien puso "" en el texto sin formato, que parece * como * un elemento HTML pero no lo es, y también, ¿qué caracteres permitirá? –
Rob
En mi caso, estoy bien diciendo que no hay etiquetas, por lo que no estaría permitido. Mis usuarios son un número limitado de empleados que ingresan productos en el sitio web de nuestra compañía. Han empezado a abusar un poco de los campos e incluyen HTML en campos que no fueron diseñados para contener HTML. –