C # 'daki HTML karakterlerini nasıl çözebilirim?


397

HTML karakter varlıkları ile kodlanmış e-posta adreslerim var. .NET'te düz dizelere dönüştürebilecek bir şey var mı?

Yanıtlar:


618

Kullanabilirsiniz HttpUtility.HtmlDecode

.NET 4.0+ kullanıyorsanız WebUtility.HtmlDecode, System.Netad alanında kullanılabilen ek bir montaj başvurusu gerektirmeyen de kullanabilirsiniz .


1
System.Web'de olması gerekiyordu, ama değil. Bir yıldan fazla bir süredir C # 'a dokunmadım, eğer biraz daha sinirli olursam onları manuel olarak dönüştüreceğim.
Vasil

1
System.Web'in .NET 2.0 sürümünde
Mark Cidade

1
System.Web kullanıyorum. Benim bağlamımda bu ad alanının sadece bazı AspPermission sınıfları var.
Vasil

17
Proje özelliklerinizde System.Web.Dll başvuru ekleyin. Gördüğünüz sınıflar, varsayılan olarak başvurulan System.dll'de canlıdır.
OwenP

11
Sorgu Dizesini deşifre etmeye çalışıyorsanız, kullanmanız gerekirHttpUtility.UrlDecode
PeterX

189

Net 4.0'da:

System.Net.WebUtility.HtmlDecode()

C # projesi için derleme eklemeye gerek yok


6
Daha iyi bir çözümdür, çünkü HttpUtility "& apos;" kodunu çözmez sembolü .. Neden bilmiyorum ..
RredCat

Bu, Evrensel Windows platformu için geliştirilirken gereklidir.
matthewsheets

Bu, .Net web sayfalarında XSS'ye neden olur mu?
Senura Dissanayake

43

@CQ'nun dediği gibi, HttpUtility.HtmlDecode kullanmanız gerekir , ancak varsayılan olarak ASP olmayan bir .NET projesinde kullanılamaz.

ASP olmayan bir .NET uygulaması için, bir başvuru eklemeniz gerekir System.Web.dll. Solution Explorer'da projenizi sağ tıklatın, "Add Reference" ı seçin, ardından listeye göz atın.System.Web.dll .

Referans eklendiğine göre, tam nitelikli ad kullanarak yönteme erişebilmeniz System.Web.HttpUtility.HtmlDecodeveya işleri kolaylaştırmak usingiçin bir ifade girebilmeniz gerekir System.Web.



7

Server.HtmlDecodeHTML varlıklarının kodunu çözmek için kullanın . Eğer isterseniz kaçış HTML, yani görüntülemek <ve >kullanıcı, kullanım karakteri Server.HtmlEncode.


4
Bir sunucu bağlamı olmayabilir (yani test senaryoları ve benzerlerini çalıştırırken) Daha önce bu tuzağa düştüm :)
Rob Cooper

7

HTML kodunu çözmek için kodun altına bir göz atın

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

Çıktı gibi

 Svendborg Værft A/S

2
HtmlDecode bir dize döndürdüğü için 'ToString ()' gereksizdir
Justin

6

HtmlAgilityPack'i benim gibi kullanıyorsanız, kullanmanız gerektiğini de belirtmek gerekir HtmlAgilityPack.HtmlEntity.DeEntitize(). Bir alır stringve a döndürür string.


1

Dizeyi parametre olarak kabul eden ve kodu çözülen html dizesini döndüren bazı yardımcı program sınıflarına statik yöntem yazın.

using System.Web.HttpUtilitySınıfınıza ekleyin

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

           return HttpUtility.HtmlDecode(text);
        }else{

         return text;
        }

    }

1

.Net 4.0 için

System.net.dllProjeye bir başvuru ekleyin ve using System.Net;ardından aşağıdaki uzantıları kullanın

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

& # X20; Dizeyi iki kez çözmek zorunda kaldım. İlk kod çözme işlemi ikinci geçişe dönüştürür ve beklenen karaktere doğru kodunu çözer.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.