Usando entities e referências numéricas de caracteres – NCR

Entities

Um charactere entitie (“entidade de caractere” ou apenas “entitie”) é um tipo de caractere de escape que é substituído por um único caractere de um conjunto específico de caracteres (charset). Existem basicamente duas formas de representar estes caracteres de escape. Através de NCRs (Numeric Character References), que podem ter uma forma hexadecimal ou decimal e através da entidade de caracteres (entities).

Ampersand

Uma palavra fácil de encontrar em qualquer documento que você for ler sobre charsets e encodings é a palavra “ampersand”, que é o nome dado ao caractere “&” conhecido por aqui como “e comercial” (&). Uma string de uma entitie sempre começa com um caractere de escape ampersand e termina com um ponto e vírgula ( ; ). No restante deste documento o termo ampersand será utilizado para referenciar o caractere &.

NCR Hexadecimal:  

Numeric Charactere Reference (NCR) hexadecimal. Todos os NCRs começam com ampersand e um sharp/sustenido (&#) e terminam com ponto e vírgula ( ; ). O carcatere “x” indica que os caracteres seguintes são hexadecimais e representam de forma escalar os valores de um caractere unicode, isto é, o número designado no mapa de códigos (code point) do conjunto unicode. O NCR hexadecimal não é case-sensitive.

Exemplo: <p>Vive la France &#xA0;!</p>

NCR Decimal: &#160;

Numeric Charactere Reference (NCR) decimal. Um NCR decimal usa apenas um valor decimal para representar o mesmo valor escalar.

Exemplo: <p>Vive la France &#160;!</p>

Character entity: &nbsp;

Um caractere entitie (entidade) é um tipo diferente de caractere de escape. Isso significa que somente uma quantidade limitada de caracteres (definidos pela especificação HTML ) podem ser representados como uma entitie. Note que as entities são case-sensitive. A entitie &Aacute; representa a letra Á em maísculo e a entitie &aacute; representa o á minúsculo.

Para que servem e quando eu devo usar caracteres de escape?

Basicamente, o uso de referências numéricas de caracteres (NCR) e/ou entidades de caracteres (entites) servem para representar de forma codificada, caracteres que devem ser renderizados no browser corretamente de tal maneira que se eles estivessem em sua forma normal no documento, isto não seria possível. Veja um exemplo:

As aspas são parte da sintaxe do XHTML e seu uso é obrigatório ao declarar atributos em qualquer elemento. O atributo title por exemplo em um hyperlink é representado da seguinte maneira:


<a href="http://www.w3.org" title="Conheça a W3C">
	W3C
</a>

Seu browser geralmente renderiza o atributo title em um formato de tooltip ao você colocar o ponteiro do mouse sobre um hyperlink que tenha o atributo declarado. Se no valor do title, você quiser colocar aspas você deve fazê-lo da seguinte maneira utilizandos entities:


<a href="http://www.revolucao.etc.br"
title="Site do Henrique &quot;Revolução&quot; Costa Pereira">
	Revolução Etc
</a>

Como as aspas na sintaxe do XHTML são utilizadas para iniciar e finalizar a declaração de um atributo, você não pode declarar outro conjunto de aspas dentro de uma mesma declaração de atributos. Sempre que precisar representar aspas dentro da declaração de algum atributo, você deverá utilizar uma entitie como caractere de escape no lugar das aspas. No exemplo acima eu utilizei &quot; no lugar das aspas.

Sempre quando um caractere fizer parte da sintaxe do XHTML, como “>”, ” < ” e “&” e você precisar com que eles sejam renderizados no browser de forma textual, você deve utilizar as entities correspondentes como no exemplo abaixo:

  • &lt; (<)
  • &gt; (>)
  • &amp; (&)

Você também pode utilizar entities para representar caracteres não suportados pelo seu encoding escolhido. Veja o exemplo ao representar caracteres em checo (Czech) em um documento utilizando o encoding ISO 8859-1.

Jako efektivn&#x115;j&#x161;&#xED; se n&#xE1;m jev&#xED; po&#x159;&#xE1;d&#xE1;n&#xED; tzv. Road Show prost&#x159;ednictv&#xED;m na&#x161;ich autorizovan&#x1FD;ch dealer&#x16F; v &#x10C;ech&#xE1;ch a na Morav&#x11B;, kter&#xE9; prob&#x11B;hnou v pr&#x16F;b&#x16F;hu z&#xE1; &#x159;&#xED; a &#x159;&#xED;jna.

Este trecho seria renderizado da seguinte maneira:

Jako efektivnější se nám jeví pořádání tzv. Road Show prostřednictvím našich autorizovaných dealerů v Čechách a na Moravě, které proběhnou v průběhu září a října.

Se o documento do exemplo estivesse utilizando um encoding como UTF-8 não seria necessário utilizar caracteres de escape de NCR para representar estes caracteres. Se casos assim acontecem com frequencia, o mais sábio seria reconsiderar trocar seu encoding para UTF-8 e ter os caracteres em sua forma normal no seu código.

Outra situação em que é necessário utilizar entities no lugar do caractere em sua forma normal é na formação de URLs que possuem parâmetros. Sempre altere o ampersand pela entitie correspondente como no exemplo:

Errado: http://www.iana.org/domains/example&name=user
Certo: http://www.iana.org/domains/example&amp;name=user

Quando não usar caracteres de escape?

Geralmente os desenvolvedores utilizam entities no lugar dos caracteres normais, como caracteres acentuados, estrangeirismos etc, por descuido ou desconhecimento sobre uma correta utilização de encodings. Utilizando o encoding UTF-8 da série unicode, você pode colocar todos os caracteres acentuados, estrangeirismo e citações em outros idiomas no código do seu documento em sua forma normal sem nenhum problema de renderização.

Na maioria das vezes será preferível utilizar um encoding que permite você escrever os caracteres no próprio documento em sua forma normal no lugar de ficar utilizando as entities. Usando entities fica mais difícil de ler e dar manutenção no código do seu documento sem falar que você pode aumentar consideravelmente o tamanho físico do seu documento. Você também pode ter problemas em determinados casos se utilizar NCR’s ou entities em documentos de XML onde em alguns casos as entites não são substituídas corretamente pelo caractere correspondente.

XHTML Character entity referency

Um lugar muito interessante para pesquisar as entities de caracteres permitidos em XHTML é a página XHTML Character entity referency. É simples e fácil de usar, basta passar o mouse sobre o caractere desejado, para ver a entitie, a NCR e o code point de determninado caractere.

Referências

Todas as referências deste artigo foram inseridas nos respectivos trechos.

  • Pingback: Charsets e encodings » Revolução Etc()

  • http://www.xmlbr.com.br Willian

    Não sabia que era melhor usar UTF-8 no lugar de ISO-8859-1. Sempre utilizei o ISO, achando que este seria mais completo. Mas vejo que o UTF-8 é melhor.

    Passarei a utilizá-lo!

    Parabéns pelo artigo!

  • Telma

    Estou com um problema, quando passo por parâmetro alguma variável que é recebida no asp do vb.net essa variável fica com o texto todo errado, tipo assim:

    "Aplicações de Técnicas"

    como eu ajustaria isso? pois isso acontece no sistema inteiro. Eu teria que mexer em todo o código do sistema?

    agradeço

    abraços

  • Pingback: BlogAjuda » Como migrar seu blog para outro servidor()

  • Fred

    p*t@ que pariu é por isso que eu amo esse site.

    Foi Muito útil

    (quase que eu erro essa pergunta de segurança – Quanto é 4 + 4?)

  • Pingback: Tutorial Iniciante de HTML: Tags, Atributos e Elementos « Codando()

  • João Rodrigo

    Era tudo o que eu precisava saber!

  • http://www.universal-nutrition.pl Breenceva

    Get in our website and read more about

    <a href BCAA” target=”_blank”>=http://www.skuteczne-odzywki.com.pl/bcaa-aminokwasy-o-rozgalezionych-lancuchach.html>BCAA