Quando devemos usar entidades HTML?

115

Isso tem me confundido há algum tempo. Com o advento do UTF-8 como o padrão de fato no desenvolvimento da web, não tenho certeza em quais situações devo usar as entidades HTML e para quais devo apenas usar o caractere UTF-8. Por exemplo,

  • travessão (-, &emdash;)
  • e comercial (&, &)
  • Fração 3/4 (¾, ¾)

Por favor, esclareça este assunto. Será apreciado.

Allesklar
fonte
Em uma nota lateral, o que htmlentities () no PHP faz?
Joe Phillips
Lendo as respostas e comentários, parece-me que ainda não existe uma regra universal a favor de um ou de outro, e a resposta ainda é que depende .
Majid Fouladpour

Respostas:

76

Geralmente, você não precisa usar entidades de caracteres HTML se o seu editor suportar Unicode. As entidades podem ser úteis quando:

  • Seu teclado não suporta o caractere que você precisa digitar. Por exemplo, muitos teclados não possuem travessão ou o símbolo de copyright.
  • Seu editor não suporta Unicode (muito comum alguns anos atrás, mas provavelmente não hoje).
  • Você quer deixar explícito na fonte o que está acontecendo. Por exemplo, o  código é mais claro do que o caractere de espaço em branco correspondente.
  • Você precisa escapar HTML caracteres especiais como <, &ou ".
JacquesB
fonte
1
Muito útil. Obrigado. Eu uso um programa útil para obter personagens incomuns. É chamado popchar e é feito por Ergonis, mas é apenas para OS X.
allesklar
3
Nota lateral: a Wikipedia ainda exige em &nbsp;vez do caractere de espaço em branco real, em parte porque o Firefox converte U + 00A0 em U + 0020 em formulários. Portanto, usar a entidade nesse caso é a única maneira de garantir que a fonte não seja bagunçada toda vez que um usuário do Firefox a edita.
Joey
2
Um bom resumo, mas em relação ao último ponto, é <que muitas vezes precisa de escape, nunca >(e "raramente precisa de escape dentro dos valores de atributo).
Jukka K. Korpela
Outro motivo para manter & nbsp; é para que você possa exibir vários espaços em uma página HTML.
zylstra
Portanto &amp;, sempre deve ser usado em vez de &? Existe um motivo para isso?
Prometheus
116

Com base nos comentários que recebi, examinei isso um pouco mais. Parece que atualmente a melhor prática é renunciar ao uso de entidades HTML e usar o caractere UTF-8 real . Os motivos listados são os seguintes:

  1. As codificações UTF-8 são mais fáceis de ler e editar para aqueles que entendem o que o caractere significa e sabe como digitá-lo.
  2. As codificações UTF-8 são tão ininteligíveis quanto as codificações de entidade HTML para aqueles que não as entendem, mas têm a vantagem de renderizar como caracteres especiais em vez de codificações decimais ou hexadecimais difíceis de entender.

Contanto que a codificação da sua página esteja configurada corretamente para UTF-8, você deve usar o caractere real em vez de uma entidade HTML. Eu li vários documentos sobre este assunto, mas os mais úteis foram:

Do artigo UTF-8: O segredo da codificação de caracteres :

A Wikipedia é um ótimo estudo de caso para um aplicativo que originalmente usava ISO-8859-1, mas mudou para UTF-8 quando se tornou muito complicado suportar idiomas estrangeiros. Os bots agora irão de fato passar por artigos e converter entidades de personagem em seus personagens reais correspondentes para facilitar o uso e pesquisar .

Esse artigo também fornece um bom exemplo envolvendo a codificação chinesa. Aqui está o exemplo abreviado por uma questão de preguiça:

UTF-8:

這兩個字是甚麼意思

Entidades HTML :

&#36889;&#20841;&#20491;&#23383;&#26159;&#29978;&#40636;&#24847;&#24605;

As codificações de entidade UTF-8 e HTML não têm sentido para mim, mas pelo menos a codificação UTF-8 é reconhecível como um idioma estrangeiro e será renderizada corretamente em uma caixa de edição. O artigo prossegue dizendo o seguinte sobre a versão codificada por entidade HTML:

Extremamente inconveniente para aqueles de nós que realmente sabem o que são entidades de caráter, totalmente ininteligível para usuários pobres que não sabem! Mesmo as entidades de caráter "inteligíveis", um pouco mais amigáveis ​​ao usuário, como o & theta; vai deixar os usuários que não estão interessados ​​em aprender HTML coçando a cabeça. Por outro lado, se virem θ em uma caixa de edição, eles saberão que é um caractere especial e o tratarão de acordo, mesmo que não saibam como escrever esse caractere eles próprios.

Como outros notaram, você ainda precisa usar entidades HTML para caracteres XML reservados (e comercial, menor que, maior que).

William Brendel
fonte
Essa resposta ajuda tremendamente. Mas para esclarecer, para meu próprio entendimento: não há nada arriscado ou inválido em usar a &entity;sintaxe em um documento HTML com um conjunto de caracteres UTF-8 declarado, correto? Embora os caracteres UTF-8 simples sejam melhores pelos motivos que você listou, não há problema em ter algumas entidades HTML ao lado deles no mesmo documento?
Jacob Ford de
@JacobFord Certo, misturar entidades HTML com caracteres UTF-8 não é arriscado ou inválido, apenas potencialmente confuso para quem está lendo a fonte.
William Brendel
5

Eu não usaria UTF-8 para caracteres que são facilmente confundidos visualmente. Por exemplo, é difícil distinguir um emdash de um menos, ou especialmente um espaço não-separável de um espaço. Para esses personagens, definitivamente use entidades.

Para caracteres que são facilmente entendidos visualmente (como os exemplos em chinês acima), vá em frente e use UTF-8 se desejar.

Ned Batchelder
fonte
5

Pessoalmente, faço tudo em utf-8 há muito tempo, no entanto, em uma página html, você sempre precisa converter e comercial (&), maior que (>) e menor que (<) caracteres em suas entidades equivalentes, & amp ;, & gt; e & lt;

Além disso, se você pretende fazer alguma programação usando texto utf-8, há algumas coisas a serem observadas.

  • O XML precisa de algumas linhas extras para validar ao usar entidades.
  • Algumas bibliotecas não funcionam bem com utf-8. Por exemplo, o PHP em algumas distribuições Linux abandonou o suporte total para utf-8 em suas bibliotecas de expressão regular.
  • É mais difícil limitar o número de caracteres em um texto que usa entidades html, porque uma única entidade usa muitos caracteres. Além disso, sempre há o risco de cortar a entidade pela metade.
Marco Luglio
fonte
É um ponto muito menor, mas não há necessidade de codificar maior que (>), apenas menor que (<).
Codemonkey
4

As entidades podem comprar alguma compatibilidade com clientes com morte cerebral que não entendem as codificações corretamente. Não acredito que isso inclua nenhum navegador atual, mas você nunca sabe que outros tipos de programas podem estar afetando você.

Mais útil, porém, é que as entidades HTML protegem você de seus próprios erros: se você configurar algo incorretamente no servidor e acabar exibindo uma página com um cabeçalho HTTP que diz isso ISO-8859-1e uma METAtag que diz isso UTF-8, pelo menos o seu & mdash; es sempre funcionará.

Jim Puls
fonte
5
Você poderia usar o argumento oposto - o fato de ser &mdashexibido corretamente mesmo se os cabeçalhos estiverem configurados incorretamente torna mais difícil detectar que há um problema.
Pekka,
4

As entidades HTML são úteis quando você deseja gerar conteúdo que será incluído (dinamicamente) em páginas com (várias) codificações diferentes. Por exemplo, temos conteúdo com etiqueta em branco que está incluído em páginas da web codificadas com ISO-8859-1 e UTF-8 ...

Se a conversão do conjunto de caracteres de / para UTF-8 não fosse uma bagunça tão grande e pouco confiável (você sempre tropeça em alguns caracteres e algumas ferramentas que não convertem corretamente), padronizar em UTF-8 seria o caminho a percorrer.

mjy
fonte
2

Se suas páginas estão codificadas corretamente em utf-8, você não deve precisar de entidades html, apenas use os caracteres que deseja diretamente.

Otávio Décio
fonte
3
Acho que você ainda precisará deles para codificar os caracteres reservados.
rmeador
@rmeador - Eu concordo com isso.
Otávio Décio
2

Todas as respostas anteriores fazem sentido para mim.

Além disso: depende principalmente do editor que você pretende usar e do idioma do documento. O requisito mínimo para o editor é que ele suporte o idioma do documento. Isso significa que se o seu texto estiver em japonês, tome cuidado ao usar um editor que não os mostre (ou seja, nenhuma entidade para o documento em si). Se estiver em inglês, você pode até usar um editor antigo semelhante ao vim e usar entidades apenas para o relativo raramente & copiar; e amigos. Claro: & gt; para> e outros especiais de HTML ainda precisam de escape. Mas mesmo com as outras línguas latin-1 (alemão, francês etc.), escrever ä é uma dor de cabeça, você sabe onde ...

Além disso, eu pessoalmente escrevo entidades para personagens invisíveis e aqueles que são semelhantes ao ASCII padrão e, portanto, são facilmente confundidos. Por exemplo, há u1173 (parecido com um traço em alguns conjuntos de caracteres) ou u1175, que se parece com a barra vertical. Eu usaria entidades para aqueles em qualquer caso.

blabla999
fonte
& gt; NÃO é necessário para>, você pode apenas usar>. & lt; É necessário para <, no entanto.
Codemonkey