Як я можу розшифрувати символи HTML у C #?


397

У мене є електронні адреси, закодовані сутностями символів HTML. Чи є щось у .NET, що може перетворити їх у звичайні рядки?

Відповіді:


618

Можна використовувати HttpUtility.HtmlDecode

Якщо ви використовуєте .NET 4.0+, ви також можете використовувати, WebUtility.HtmlDecodeякі не потребують додаткової посилання на збірку, оскільки це доступно в System.Netпросторі імен.


1
Це повинно бути в System.Web, але це не так. Я не торкався C # вже більше року, якщо я ще більше засмучуся цим, я конвертую їх вручну.
Василь

1
Він знаходиться у версії .NET 2.0 System.Web
Марк Сідаде

1
У мене використовується System.Web. У моєму контексті у просторі імен є лише деякі класи AspPermission.
Василь

17
Додайте посилання на System.Web.Dll у властивості проекту. Класи, які ви бачите наживо в System.dll, на які посилається за замовчуванням.
OwenP

11
Якщо ви намагаєтеся розшифрувати рядок запитів, вам потрібно скористатисяHttpUtility.UrlDecode
PeterX

189

У .Net 4.0:

System.Net.WebUtility.HtmlDecode()

Не потрібно включати складання для проекту C #


6
Це краще рішення, оскільки HttpUtility не розшифровує "& apos". символ .. Я не знаю, чому ..
RredCat

Це потрібно для розробки платформи Universal Windows.
matthewsheets

Чи спричинить це XSS на веб-сторінках .Net?
Senura Dissanayake

43

Як говорить @CQ, вам потрібно використовувати HttpUtility.HtmlDecode , але він недоступний у проекті , що не є ASP .NET, за замовчуванням.

Для програми, яка не є ASP .NET, потрібно додати посилання на System.Web.dll. Клацніть правою кнопкою миші ваш проект у Провіднику рішень, виберіть "Додати довідку" та перегляньте список System.Web.dll.

Тепер, коли посилання додано, ви повинні мати доступ до методу, використовуючи повнокваліфіковане ім’я System.Web.HttpUtility.HtmlDecodeабо вставити usingзаяву для System.Webполегшення.



7

Використовуйте Server.HtmlDecodeдля декодування об'єктів HTML. Якщо ви хочете уникнути HTML, тобто відобразити <і >символ для користувача, використовуйте Server.HtmlEncode.


4
Можливо, не існує контексту сервера (наприклад, під час запуску тестових випадків тощо), я раніше потрапляв у цю пастку :)
Роб Купер

7

Щоб розшифрувати HTML, подивіться нижче коду

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

Вихід такий

 Svendborg Værft A/S

2
'ToString ()' є зайвим, оскільки HtmlDecode повертає рядок
Джастін

6

Також варто згадати, що якщо ви використовуєте HtmlAgilityPack, як я, ви повинні використовувати HtmlAgilityPack.HtmlEntity.DeEntitize(). Він займає a stringі повертає a string.


1

Запишіть статичний метод в якийсь клас утиліти, який приймає рядок як параметр і повертає декодовану HTML-рядок.

Включіть using System.Web.HttpUtilityу свій клас

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

           return HttpUtility.HtmlDecode(text);
        }else{

         return text;
        }

    }

1

Для .net 4.0

Додайте посилання на System.net.dllпроект, після using System.Net;чого використовуйте наступні розширення

// 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; Мені довелося подвійно розшифрувати рядок. Перший декодування перетворив би його на другий пропуск, правильно би декодував його до очікуваного символу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.