2011-12-01 17 views
16

Sto cercando una funzione che decodifichi una buona quantità di entità HTML.Decodifica di tutte le entità HTML

La ragione è sto lavorando su un codice a prendere contenuto HTML e trasformandolo in testo normale, il problema che ho è un sacco di entità fare non get convertito con HttpUtility.HtmlDecode.

Alcuni esempi di entità di cui sono preoccupato sono & nbsp ;, & amp ;, & copia ;.

Questo è per .net 3.5.

+0

Sono passato a .Net 3.5 e utilizzato 'Console.WriteLine (HttpUtility.HtmlDecode ("  , &, © "));' e ha funzionato bene per me. Non riesco a capire perché potresti avere problemi. Hai una codifica di stringa strana o qualcosa del genere? –

risposta

19

Allora forse è necessario il HttpUtility. HtmlDecode ?. Dovrebbe funzionare, è sufficiente aggiungere un riferimento a System.Web. Almeno questo era il modo in Net Framework 4. <

Ad esempio, il seguente codice:

MessageBox.Show(HttpUtility.HtmlDecode("&amp;&copy;")); 

ha funzionato e l'uscita era come previsto (e commerciale e simbolo di copyright). Sei sicuro che il problema sia all'interno di HtmlDecode e non qualcos'altro?

AGGIORNAMENTO: Un'altra classe in grado di svolgere il lavoro, WebUtility (di nuovo metodo HtmlDecode) è disponibile nelle versioni più recenti di .Net. Tuttavia, sembra che ci siano alcuni problemi con esso. Vedi la domanda HttpUtility vs. WebUtility.

+0

Si è corretto, era come stavo usando il risultato, se lo metto in un asp: etichetta convertirà il carattere copywrite in ©. – Matthew

+0

Capisco. È abbastanza utile sapere :) –

20

Usa WebUtility.HtmlDecode incluso nel .Net 4

Per esempio, se corro in una console app:

Console.WriteLine(WebUtility.HtmlDecode("&nbsp;, &amp;, &copy;")); 

ottengo , &, c

+1

Probabilmente avrei dovuto dirlo per .net 3.5. Ti ho fatto +1 Grazie lo stesso. – Matthew

+0

Qual è la differenza tra il metodo 'HtmlDecode' di WebUtility e HttpUtility? – crush

+0

C'è una risposta qui: http://stackoverflow.com/questions/17352981/webutility-htmldecode-vs-httputilty-htmldecode In breve - WebUtility venuto con WinRT, è più recente, mentre la HttpUtility è quello vecchio (usato tutto oltre il posto, quindi mi aspetto che rimanga). Inoltre penso che WebUtility sia in System.dll (System.Net), il che lo rende un po 'più accessibile per WinApps (non devi dipendere da System.Web) se non ricordo male. –