Jak mogę dekodować znaki HTML w C #?


397

Mam adresy e-mail zakodowane przy pomocy znaków HTML. Czy w .NET jest coś, co może przekonwertować je na zwykłe ciągi znaków?

Odpowiedzi:


618

Możesz użyć HttpUtility.HtmlDecode

Jeśli korzystasz z .NET 4.0+, możesz również użyć, WebUtility.HtmlDecodektóry nie wymaga dodatkowego odwołania do zestawu, ponieważ jest on dostępny w System.Netprzestrzeni nazw.


1
Powinno być w System.Web, ale tak nie jest. Nie dotknąłem C # od ponad roku, jeśli poczuję się trochę bardziej sfrustrowany, przekonwernę je ręcznie.
Vasil

1
Jest w wersji .NET 2.0 System.Web
Mark Cidade,

1
Korzystam z System.Web. W moim kontekście ta przestrzeń nazw ma tylko niektóre klasy AspPermission.
Vasil

17
Dodaj odwołanie do System.Web.Dll we właściwościach projektu. Klasy, które widzisz na żywo w System.dll, do którego domyślnie się odwołujesz.
OwenP,

11
Jeśli próbujesz zdekodować ciąg zapytania, musisz użyćHttpUtility.UrlDecode
PeterX

189

W .Net 4.0:

System.Net.WebUtility.HtmlDecode()

Nie ma potrzeby dołączania zestawu dla projektu w języku C #


6
Jest to lepsze rozwiązanie, ponieważ HttpUtility nie dekoduje „& apos;” symbol .. Nie wiem dlaczego ..
RredCat

Jest to wymagane przy opracowywaniu platformy Universal Windows.
matthewsheets,

Czy spowoduje to XSS na stronach internetowych .Net?
Senura Dissanayake

43

Jak mówi @CQ, musisz użyć HttpUtility.HtmlDecode , ale domyślnie nie jest dostępny w projekcie .NET ASP.

W przypadku aplikacji bez platformy ASP .NET należy dodać odwołanie do System.Web.dll. Kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań, wybierz „Dodaj odniesienie”, a następnie przejrzyj listę System.Web.dll.

Po dodaniu odwołania powinno być możliwe uzyskanie dostępu do metody przy użyciu w pełni kwalifikowanej nazwy System.Web.HttpUtility.HtmlDecodelub wstawienie usinginstrukcji System.Webułatwiającej.



7

Służy Server.HtmlDecodedo dekodowania encji HTML. Jeśli chcesz uciec od HTML, tj. Wyświetlić znak <i >dla użytkownika, użyj Server.HtmlEncode.


4
Może nie istnieć kontekst serwera (tj. Podczas uruchamiania przypadków testowych itp.) Wpadłem wcześniej w tę pułapkę :)
Rob Cooper

7

Aby zdekodować HTML, spójrz poniżej kodu

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

Wyjście jest jak

 Svendborg Værft A/S

2
„ToString ()” jest zbędne, ponieważ HtmlDecode zwraca ciąg znaków
Justin

6

Warto również wspomnieć, że jeśli używasz HtmlAgilityPack tak jak ja, powinieneś użyć HtmlAgilityPack.HtmlEntity.DeEntitize(). Trwa stringi zwraca a string.


1

Napisz metodę statyczną do jakiejś klasy narzędzia, która akceptuje ciąg jako parametr i zwraca zdekodowany ciąg html.

Uwzględnij using System.Web.HttpUtilityw swojej klasie

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

           return HttpUtility.HtmlDecode(text);
        }else{

         return text;
        }

    }

1

Dla .net 4.0

Dodaj odniesienie do System.net.dllprojektu, a using System.Net;następnie użyj następujących rozszerzeń

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

Dla ciągów zawierających & # x20; Musiałem dwukrotnie odkodować ciąg. Pierwsze dekodowanie zamieniłoby go w drugi przebieg poprawnie kodowałoby go do oczekiwanego znaku.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.