Bagaimana saya bisa mendekode karakter HTML dalam C #?


397

Saya memiliki alamat email yang dikodekan dengan entitas karakter HTML. Apakah ada sesuatu di .NET yang dapat mengubahnya menjadi string biasa?

Jawaban:


618

Kamu bisa menggunakan HttpUtility.HtmlDecode

Jika Anda menggunakan .NET 4.0+, Anda juga dapat menggunakan WebUtility.HtmlDecodeyang tidak memerlukan referensi perakitan tambahan karena tersedia di System.Netnamespace.


1
Seharusnya di System.Web, tetapi tidak. Saya belum menyentuh C # lebih dari setahun, jika saya sedikit frustrasi dengan ini, saya akan mengonversinya secara manual.
Vasil

1
Ada dalam versi .NET 2.0 dari System.Web
Mark Cidade

1
Saya telah menggunakan System.Web. Dalam konteks saya bahwa namespace hanya memiliki beberapa kelas AspPermission.
Vasil

17
Tambahkan referensi ke System.Web.Dll di properti proyek Anda. Kelas yang Anda lihat langsung di System.dll yang direferensikan secara default.
OwenP

11
Jika Anda mencoba untuk men-decode String Query, Anda perlu menggunakanHttpUtility.UrlDecode
PeterX

189

Di .Net 4.0:

System.Net.WebUtility.HtmlDecode()

Tidak perlu menyertakan perakitan untuk proyek C #


6
Ini adalah solusi yang lebih baik karena HttpUtility tidak memecahkan kode "& apos;" simbol .. Saya tidak tahu mengapa ..
RredCat

Ini diperlukan dalam pengembangan untuk platform Universal Windows.
matthewsheets

Apakah ini akan menyebabkan XSS di halaman web .Net?
Senura Dissanayake

43

Seperti yang dikatakan @CQ, Anda harus menggunakan HttpUtility.HtmlDecode , tetapi tidak tersedia dalam proyek .NET non-ASP secara default.

Untuk aplikasi .NET non-ASP, Anda perlu menambahkan referensi System.Web.dll. Klik kanan proyek Anda di Solution Explorer, pilih "Tambahkan Referensi", lalu telusuri daftar untuk System.Web.dll.

Sekarang setelah rujukan ditambahkan, Anda harus dapat mengakses metode menggunakan nama yang sepenuhnya memenuhi syarat System.Web.HttpUtility.HtmlDecodeatau menyisipkan usingpernyataan untuk System.Webmempermudah.



7

Gunakan Server.HtmlDecodeuntuk mendekode entitas HTML. Jika Anda ingin lepas dari HTML, yaitu menampilkan <dan >karakter ke pengguna, gunakan Server.HtmlEncode.


4
Mungkin tidak ada konteks server (yaitu ketika menjalankan test case dan sejenisnya) Saya jatuh ke perangkap ini sebelumnya :)
Rob Cooper

7

Untuk mendekode HTML, lihat kode di bawah ini

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

Outputnya seperti

 Svendborg Værft A/S

2
'ToString ()' berlebihan karena HtmlDecode mengembalikan string
Justin

6

Perlu juga disebutkan bahwa jika Anda menggunakan HtmlAgilityPack seperti saya, Anda harus menggunakan HtmlAgilityPack.HtmlEntity.DeEntitize(). Dibutuhkan stringdan mengembalikan a string.


1

Tulis metode statis ke beberapa kelas utilitas, yang menerima string sebagai parameter dan mengembalikan string html yang di-decode.

Sertakan using System.Web.HttpUtilityke dalam kelas Anda

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

           return HttpUtility.HtmlDecode(text);
        }else{

         return text;
        }

    }

1

Untuk .net 4.0

Tambahkan referensi ke System.net.dllproyek dengan using System.Net;kemudian gunakan ekstensi berikut

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

Untuk string yang mengandung & # x20; Saya harus men-decode string. Decode pertama akan mengubahnya menjadi pass kedua dengan benar akan mendekodekannya ke karakter yang diharapkan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.