Как я могу декодировать символы 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

Это необходимо при разработке для универсальной платформы Windows.
Matthewsheets

Будет ли это вызывать XSS на веб-страницах .Net?
Сенура Диссанаяке

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(). Он берет stringи возвращает string.


1

Запишите static метод в некоторый служебный класс, который принимает строку в качестве параметра и возвращает декодированную строку 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.