Làm cách nào để giải mã các ký tự HTML trong C #?


397

Tôi có địa chỉ email được mã hóa bằng các thực thể ký tự HTML. Có bất cứ điều gì trong .NET có thể chuyển đổi chúng thành chuỗi đơn giản không?

Câu trả lời:


618

Bạn có thể dùng HttpUtility.HtmlDecode

Nếu bạn đang sử dụng .NET 4.0+, bạn cũng có thể sử dụng WebUtility.HtmlDecodekhông yêu cầu tham chiếu lắp ráp bổ sung vì nó có sẵn trong System.Netkhông gian tên.


1
Nó được cho là trong System.Web, nhưng không phải vậy. Tôi đã không chạm vào C # trong hơn một năm, nếu tôi cảm thấy thất vọng hơn một chút với điều này, tôi sẽ chuyển đổi chúng theo cách thủ công.
Vasil

1
Đó là phiên bản .NET 2.0 của System.Web
Mark Cidade

1
Tôi đã sử dụng System.Web. Trong ngữ cảnh của tôi, không gian tên chỉ có một số lớp AspPermission.
Vasil

17
Thêm một tham chiếu đến System.Web.Dll trong thuộc tính dự án của bạn. Các lớp bạn thấy trực tiếp trong System.dll được tham chiếu theo mặc định.
OwenP

11
Trong trường hợp bạn đang cố giải mã Chuỗi truy vấn, bạn cần sử dụngHttpUtility.UrlDecode
PeterX

189

Trên .Net 4.0:

System.Net.WebUtility.HtmlDecode()

Không cần bao gồm lắp ráp cho một dự án C #


6
Đó là giải pháp tốt hơn vì HttpUtility không giải mã "& apos;" biểu tượng .. Tôi không biết tại sao ..
RredCat

Điều này là cần thiết trong việc phát triển cho nền tảng Windows phổ quát.
matthewsheet

Điều này có gây ra XSS trong các trang web .Net không?
Senura Dissanayake

43

Như @CQ nói, bạn cần sử dụng HttpUtility.HtmlDecode , nhưng nó không có sẵn trong một dự án không phải là .NET .NET theo mặc định.

Đối với một ứng dụng .NET không phải là ASP, bạn cần thêm một tham chiếu đến System.Web.dll. Bấm chuột phải vào dự án của bạn trong Solution Explorer, chọn "Thêm tham chiếu", sau đó duyệt danh sách cho System.Web.dll.

Bây giờ khi tham chiếu được thêm vào, bạn sẽ có thể truy cập phương thức bằng cách sử dụng tên đủ điều kiện System.Web.HttpUtility.HtmlDecodehoặc chèn một usingcâu lệnh System.Webđể làm cho mọi thứ dễ dàng hơn.


16

Nếu không có ngữ cảnh Máy chủ (tức là bạn đang chạy ngoại tuyến), bạn có thể sử dụng HttpUtility . Mã Html .


1
Đồng ý, đó là lý do tại sao tôi sử dụng HttpUtility, rơi vào cùng một cái bẫy = P
Quintin Robinson

7

Sử dụng Server.HtmlDecodeđể giải mã các thực thể HTML. Nếu bạn muốn thoát HTML, tức là hiển thị ký tự <>ký tự cho người dùng, hãy sử dụng Server.HtmlEncode.


4
Có thể không có bối cảnh máy chủ (tức là khi chạy các trường hợp thử nghiệm và tương tự) Tôi đã rơi vào cái bẫy này trước đó :)
Rob Cooper

7

Để giải mã HTML, hãy xem mã bên dưới

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

Đầu ra giống như

 Svendborg Værft A/S

2
'ToString ()' là dự phòng vì HtmlDecode trả về một chuỗi
Justin

6

Một điều đáng nói nữa là nếu bạn đang sử dụng HtmlAgilityPack như tôi, bạn nên sử dụng HtmlAgilityPack.HtmlEntity.DeEntitize(). Phải mất một stringvà trả về a string.


1

Viết một phương thức tĩnh vào một số lớp tiện ích, chấp nhận chuỗi làm tham số và trả về chuỗi html được giải mã.

Bao gồm trong using System.Web.HttpUtilitylớp học của bạn

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

           return HttpUtility.HtmlDecode(text);
        }else{

         return text;
        }

    }

1

Dành cho .net 4.0

Thêm một tham chiếu đến System.net.dlldự án using System.Net;sau đó sử dụng các phần mở rộng sau

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

Đối với các chuỗi chứa & # x20; Tôi đã phải giải mã hai lần chuỗi. Giải mã đầu tiên sẽ biến nó thành vượt qua thứ hai sẽ giải mã chính xác nó cho nhân vật dự kiến.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.