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.