Wie kann ich HTML-Zeichen in C # dekodieren?


397

Ich habe E-Mail-Adressen, die mit HTML-Zeichenelementen codiert sind. Gibt es irgendetwas in .NET, das sie in einfache Zeichenfolgen konvertieren kann?

Antworten:


618

Sie können verwenden HttpUtility.HtmlDecode

Wenn Sie .NET 4.0+ verwenden, können Sie auch verwenden, für WebUtility.HtmlDecodedas keine zusätzliche Assemblyreferenz erforderlich ist, da diese im System.NetNamespace verfügbar ist .


1
Es soll in System.Web sein, ist es aber nicht. Ich habe C # seit mehr als einem Jahr nicht mehr berührt. Wenn ich etwas frustrierter bin, konvertiere ich sie manuell.
Vasil

1
Es ist in der .NET 2.0-Version von System.Web
Mark Cidade

1
Ich habe System.Web verwendet. In meinem Kontext hat dieser Namespace nur einige AspPermission-Klassen.
Vasil

17
Fügen Sie in Ihren Projekteigenschaften einen Verweis auf System.Web.Dll hinzu. Die angezeigten Klassen befinden sich in System.dll, auf die standardmäßig verwiesen wird.
OwenP

11
HttpUtility.UrlDecode
Wenn

189

In .NET 4.0:

System.Net.WebUtility.HtmlDecode()

Für ein C # -Projekt muss keine Assembly hinzugefügt werden


6
Es ist eine bessere Lösung, da HttpUtility "& apos;" nicht dekodiert. Symbol .. Ich weiß nicht warum ..
RredCat

Dies ist bei der Entwicklung für die Universal Windows-Plattform erforderlich.
Matthewsheets

Verursacht dies XSS auf .NET-Webseiten?
Senura Dissanayake

43

Wie @CQ sagt, müssen Sie HttpUtility.HtmlDecode verwenden , aber es ist standardmäßig nicht in einem Nicht-ASP .NET-Projekt verfügbar.

Für eine Nicht-ASP .NET-Anwendung müssen Sie einen Verweis auf hinzufügen System.Web.dll. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihr Projekt, wählen Sie "Referenz hinzufügen" und durchsuchen Sie die Liste nach System.Web.dll.

Nachdem die Referenz hinzugefügt wurde, sollten Sie in der Lage sein, unter Verwendung des vollständig qualifizierten Namens auf die Methode zuzugreifen System.Web.HttpUtility.HtmlDecodeoder eine usingAnweisung einzufügen System.Web, um die Arbeit zu vereinfachen.



7

Verwenden Sie Server.HtmlDecodediese Option, um die HTML-Entitäten zu dekodieren. Wenn Sie dem HTML- Code entkommen möchten , dh dem Benutzer das Zeichen <und anzeigen möchten >, verwenden Sie Server.HtmlEncode.


4
Es gibt möglicherweise keinen Serverkontext (dh beim Ausführen von Testfällen und dergleichen), in den ich zuvor in diese Falle geraten bin :)
Rob Cooper

7

Um HTML zu dekodieren, sehen Sie sich den folgenden Code an

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

Ausgabe ist wie

 Svendborg Værft A/S

2
Das 'ToString ()' ist redundant, da HtmlDecode einen String zurückgibt
Justin

6

Es ist auch erwähnenswert, dass Sie HtmlAgilityPack wie ich verwenden sollten, wenn Sie es verwenden HtmlAgilityPack.HtmlEntity.DeEntitize(). Es dauert a stringund gibt a zurück string.


1

Schreiben Sie eine statische Methode in eine Dienstprogrammklasse, die eine Zeichenfolge als Parameter akzeptiert und die dekodierte HTML-Zeichenfolge zurückgibt.

Nehmen Sie das using System.Web.HttpUtilityin Ihre Klasse auf

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

           return HttpUtility.HtmlDecode(text);
        }else{

         return text;
        }

    }

1

Für .net 4.0

Fügen Sie einen Verweis auf System.net.dlldas Projekt hinzu, und verwenden Sie using System.Net;dann die folgenden Erweiterungen

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

Für Zeichenfolgen mit & # x20; Ich musste den String doppelt dekodieren. Die erste Dekodierung würde es in den zweiten Durchgang verwandeln und es korrekt in das erwartete Zeichen dekodieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.