¿Cómo puedo decodificar caracteres HTML en C #?


397

Tengo direcciones de correo electrónico codificadas con entidades de caracteres HTML. ¿Hay algo en .NET que pueda convertirlos en cadenas simples?

Respuestas:


618

Puedes usar HttpUtility.HtmlDecode

Si está utilizando .NET 4.0+, también puede usarlo, WebUtility.HtmlDecodeque no requiere una referencia de ensamblaje adicional, ya que está disponible en el System.Netespacio de nombres.


1
Se supone que está en System.Web, pero no lo está. No he tocado C # durante más de un año, si me siento un poco más frustrado con esto, los convertiré manualmente.
Vasil

1
Está en la versión .NET 2.0 de System.Web
Mark Cidade el

1
Tengo usando System.Web. En mi contexto, ese espacio de nombres solo tiene algunas clases AspPermission.
Vasil

17
Agregue una referencia a System.Web.Dll en las propiedades de su proyecto. Las clases que ve en vivo en System.dll, a las que se hace referencia de forma predeterminada.
OwenP

11
En caso de que intente decodificar la Cadena de consulta, debe usarHttpUtility.UrlDecode
PeterX

189

En .Net 4.0:

System.Net.WebUtility.HtmlDecode()

No es necesario incluir el ensamblaje para un proyecto de C #


66
Es una mejor solución porque HttpUtility no decodifica "& apos;" símbolo .. No sé por qué ..
RredCat

Esto es necesario en el desarrollo de la plataforma universal de Windows.
matthewsheets

¿Causará esto XSS en las páginas web .Net?
Senura Dissanayake

43

Como dice @CQ, debe usar HttpUtility.HtmlDecode , pero no está disponible en un proyecto que no sea ASP .NET de forma predeterminada.

Para una aplicación que no sea ASP .NET, debe agregar una referencia a System.Web.dll. Haga clic derecho en su proyecto en el Explorador de soluciones, seleccione "Agregar referencia", luego busque la lista System.Web.dll.

Ahora que se agrega la referencia, debería poder acceder al método utilizando el nombre completo System.Web.HttpUtility.HtmlDecodeo insertar una usingdeclaración para System.Webfacilitar las cosas.



7

Use Server.HtmlDecodepara decodificar las entidades HTML. Si desea escapar del HTML, es decir, mostrar el carácter <y >al usuario, use Server.HtmlEncode.


44
Puede que no haya un contexto de servidor (es decir, al ejecutar casos de prueba y similares) caí en esta trampa antes :)
Rob Cooper

7

Para decodificar HTML, eche un vistazo debajo del código

string s = "Svendborg V&#230;rft A/S";
string a = HttpUtility.HtmlDecode(s);
Response.Write(a);

La salida es como

 Svendborg Værft A/S

2
El 'ToString ()' es redundante ya que HtmlDecode devuelve una cadena
Justin

6

También vale la pena mencionar que si está utilizando HtmlAgilityPack como yo, debería usarlo HtmlAgilityPack.HtmlEntity.DeEntitize(). Toma a stringy devuelve a string.


1

Escriba un método estático en alguna clase de utilidad, que acepte la cadena como parámetro y devuelva la cadena html decodificada.

Incluye el using System.Web.HttpUtilityen tu clase

public static string HtmlEncode(string text)
    {
        if(text.length > 0){

           return HttpUtility.HtmlDecode(text);
        }else{

         return text;
        }

    }

1

Para .net 4.0

Agregue una referencia al System.net.dllproyecto con using System.Net;luego use las siguientes extensiones

// Html encode/decode
    public static string HtmDecode(this string htmlEncodedString)
    {
        if(htmlEncodedString.Length > 0)
        {
            return System.Net.WebUtility.HtmlDecode(htmlEncodedString);
        }
        else
        {
            return htmlEncodedString;
        }
    }

    public static string HtmEncode(this string htmlDecodedString)
    {
        if(htmlDecodedString.Length > 0)
        {
            return System.Net.WebUtility.HtmlEncode(htmlDecodedString);
        }
        else
        {
            return htmlDecodedString;
        }
    }

0

Para cadenas que contienen & # x20; He tenido que decodificar dos veces la cadena. La primera decodificación la convertiría en la segunda pasada la decodificaría correctamente al carácter esperado.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.