Come posso decodificare i caratteri HTML in C #?


397

Ho indirizzi e-mail codificati con entità di caratteri HTML. C'è qualcosa in .NET che può convertirli in stringhe semplici?

Risposte:


618

Puoi usare HttpUtility.HtmlDecode

Se si utilizza .NET 4.0+, è possibile utilizzare anche WebUtility.HtmlDecodeciò che non richiede un riferimento di assembly aggiuntivo in quanto è disponibile nello System.Netspazio dei nomi.


1
Dovrebbe essere in System.Web, ma non lo è. Non tocco C # da più di un anno, se divento un po 'più frustrato con questo, li convertirò manualmente.
Vasil,

1
È nella versione .NET 2.0 di System.Web
Mark Cidade,

1
Sto usando System.Web. Nel mio contesto quello spazio dei nomi ha solo alcune classi AspPermission.
Vasil,

17
Aggiungi un riferimento a System.Web.Dll nelle proprietà del tuo progetto. Le classi che vedi vivono in System.dll a cui fa riferimento per impostazione predefinita.
OwenP,

11
Nel caso in cui si stia tentando di decodificare la stringa di query, è necessario utilizzareHttpUtility.UrlDecode
PeterX

189

Su .Net 4.0:

System.Net.WebUtility.HtmlDecode()

Non è necessario includere assembly per un progetto C #


6
È la soluzione migliore perché HttpUtility non decodifica "& apos;" simbolo .. Non so perché ..
RredCat

Questo è necessario per lo sviluppo della piattaforma Windows universale.
matthewsheets,

Questo causerà XSS nelle pagine Web .Net?
Senura Dissanayake,

43

Come dice @CQ, è necessario utilizzare HttpUtility.HtmlDecode , ma per impostazione predefinita non è disponibile in un progetto .NET non ASP.

Per un'applicazione non ASP ASP, è necessario aggiungere un riferimento a System.Web.dll. Fare clic con il tasto destro del mouse sul progetto in Esplora soluzioni, selezionare "Aggiungi riferimento", quindi cercare l'elenco System.Web.dll.

Ora che il riferimento è stato aggiunto, dovresti essere in grado di accedere al metodo utilizzando il nome completo System.Web.HttpUtility.HtmlDecodeo inserire usingun'istruzione per System.Websemplificare le cose.



7

Utilizzare Server.HtmlDecodeper decodificare le entità HTML. Se si desidera sfuggire all'HTML, ovvero visualizzare il carattere <e >per l'utente, utilizzare Server.HtmlEncode.


4
Potrebbe non esserci un contesto server (cioè quando eseguo casi di test e simili) Sono caduto in questa trappola prima :)
Rob Cooper,

7

Per decodificare HTML, dai un'occhiata al codice seguente

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

L'output è simile

 Svendborg Værft A/S

2
'ToString ()' è ridondante poiché HtmlDecode restituisce una stringa
Giustino

6

Vale anche la pena ricordare che se stai usando HtmlAgilityPack come me, dovresti usare HtmlAgilityPack.HtmlEntity.DeEntitize(). Prende a stringe restituisce a string.


1

Scrivi un metodo statico in una classe di utilità, che accetta la stringa come parametro e restituisce la stringa html decodificata.

Includi il using System.Web.HttpUtilitynella tua classe

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

           return HttpUtility.HtmlDecode(text);
        }else{

         return text;
        }

    }

1

Per .net 4.0

Aggiungi un riferimento al System.net.dllprogetto con using System.Net;quindi usa le seguenti estensioni

// 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

Per stringhe contenenti & # x20; Ho dovuto decodificare due volte la stringa. Il primo decodifica lo trasformerebbe nel secondo passaggio e lo decodificherebbe correttamente al carattere previsto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.