Como decodificar caracteres HTML em c #?


397

Eu tenho endereços de email codificados com entidades de caracteres HTML. Existe alguma coisa no .NET que possa convertê-los em strings simples?

Respostas:


618

Você pode usar HttpUtility.HtmlDecode

Se você estiver usando o .NET 4.0+, também poderá usar o WebUtility.HtmlDecodeque não requer uma referência de montagem extra, pois está disponível no System.Netespaço para nome.


11
Ele deveria estar no System.Web, mas não está. Não toquei em C # há mais de um ano; se ficar um pouco mais frustrado com isso, vou convertê-los manualmente.
— Vasil

11
Está na versão .NET 2.0 do System.Web
— Mark Cidade

11
Eu estou usando System.Web. No meu contexto, esse namespace possui apenas algumas classes AspPermission.
— Vasil

17
Adicione uma referência ao System.Web.Dll nas propriedades do seu projeto. As classes que você vê vivem no System.dll, que são referenciadas por padrão.
— OwenP 23/09/08

11
No caso você está tentando tentando decodificar a seqüência de consulta, você precisa usarHttpUtility.UrlDecode
— PeterX

189

No .Net 4.0:

System.Net.WebUtility.HtmlDecode()

Não há necessidade de incluir montagem para um projeto C #


6
É uma solução melhor porque o HttpUtility não decodifica "& apos;" símbolo .. Eu não sei porque ..
— RredCat

Isso é necessário no desenvolvimento da plataforma Universal Windows.
— matthewsheets

Isso causará XSS nas páginas da web .Net?
— Senura Dissanayake

43

Como o @CQ diz, você precisa usar o HttpUtility.HtmlDecode , mas por padrão não está disponível em um projeto .NET não-ASP.

Para um aplicativo .NET não ASP, você precisa adicionar uma referência a System.Web.dll. Clique com o botão direito do mouse no seu projeto no Gerenciador de Soluções, selecione "Adicionar Referência" e procure a lista System.Web.dll.

Agora que a referência foi adicionada, você poderá acessar o método usando o nome completo System.Web.HttpUtility.HtmlDecodeou inserir uma usinginstrução para System.Webfacilitar as coisas.



7

Use Server.HtmlDecodepara decodificar as entidades HTML. Se você quiser escapar do HTML, ou seja, exibir o caractere <e >para o usuário, use Server.HtmlEncode.


4
Pode não haver um contexto de servidor (ou seja, ao executar casos de teste e outros) Eu caí no a esta armadilha antes :)
— Rob Cooper

7

Para decodificar HTML, veja o código abaixo

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

Saída é como

 Svendborg Værft A/S

2
O 'ToString ()' é redundante, dado HtmlDecode retorna uma string
— Justin

6

Também vale a pena mencionar que, se você estiver usando o HtmlAgilityPack como eu, deveria usá-lo HtmlAgilityPack.HtmlEntity.DeEntitize(). É preciso a stringe retorna a string.


1

Escreva um método estático em alguma classe de utilitário, que aceita string como parâmetro e retorna a string html decodificada.

Inclua o conteúdo using System.Web.HttpUtilityem sua classe

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

           return HttpUtility.HtmlDecode(text);
        }else{

         return text;
        }

    }

1

Para .net 4.0

Adicione uma referência ao System.net.dllprojeto using System.Net;e use as seguintes extensões

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

Para strings contendo & # x20; Eu tive que decodificar duas vezes a string. A primeira decodificação a transformaria na segunda passagem que a decodificaria corretamente para o caractere esperado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.