A tecla de acesso 'n' salta para outro local na navegação da página. Saltar para o início do conteúdo.

Este documento é uma tradução. Se ocorrerem discrepâncias ou erros, o original em inglês mais recente terá precedência. Os direitos autorais originais pertencem ao W3C, como indicado no final da página.

Tradutor: Brazilian Portuguese Translation Team, Trusted Translations, Inc.

s_gotoW3cHome Internacionalização
 

Utilizando caracteres de escape em marcação e CSS

Público alvo: Codificadores XHTML/HTML (utilizando editores ou fazendo scripts), desenvolvedores de script (PHP, JSP, etc.), e qualquer um que precise de orientação sobre como e onde utilizar alternativas para caracteres reais em um documento.

Pergunta

Como posso utilizar caracteres de escape em marcação e CSS, e quando devo utilizá-los ou não utilizá-los?

Resposta

Que tipos de caracteres de escape podem ser utilizados em marcação?

Você pode utilizar um caractere de escape para representar um caractere Unicode em XML ou (X)HTML utilizando apenas caracteres ASCII.

Especificações diferentes dão nomes diferentes a estas estruturas. Por exemplo, a especificação HTML5 chama referências de entidade de caractere chamadas referências de caractere. Decidimos utilizar nomes para este artigo que esperamos serem reconhecidamente diferentes e terem significado claro para o leitor, quaisquer que sejam as variações utilizados por eles até agora.

NCRs (referências de caractere numérico) e referências de entidade de caractere são tipos de caracteres de escape utilizados em marcação. Por exemplo, a seguir temos diferentes maneiras de representar o caractere U+00A0 NO-BREAK SPACE.

(O caractere NO-BREAK SPACE parece um espaço, mas evita um final de linha entre os caracteres em cada lado. Em francês, é comumente utilizado com pontuações como dois pontos e pontos de exclamação, que são precedidos por um espaço mas não aparecem no começo de uma linha durante um final de linha)

 
Uma NCR hexadecimal. Todas as NCRs começam com &# e terminam com ;. O x indica que o que se segue é um número hexadecimal representando o valor de ponto de código de um caractere Unicode. O número hex não diferencia maiúsculas de minúsculas.
Exemplo: <p>Vive la France&#xA0;!</p>
&#160;
Uma NCR decimal. Utiliza um número decimal para representar o mesmo ponto de código Unicode.
Exemplo: <p>Vive la France&#160;!</p>
&nbsp;
Uma referência de entidade de caractere. Este é um tipo de escape muito diferente. As referências de entidade de caractere são determinadas na definição da linguagem de marcação. Isto significa, por exemplo, que em HTML apenas uma faixa específica de caracteres (definida pela especificação HTML) pode ser representada como referências de entidade de caractere (e isto inclui apenas um pequeno subconjunto da faixa Unicode). Observe que o nome da entidade diferencia maiúsculas de minúsculas: em HTML, &Aacute; representa a letra maiúscula Á, enquanto que &aacute; representa a minúscula á.
Exemplo: <p>Vive la France&nbsp;!</p>
Alguns navegadores permitem que você omita o ponto e vírgula no fim de uma referência de caractere numérico, mas isto não é recomendado, já que pode levar a problemas de interoperabilidade. Utilizar um ponto e vírgula também evita o potencial problema do fim do escape, tornando-se indetectável quando o escape está inserido no texto.

Um ponto que merece atenção especial é o fato de que os valores de referências de caractere numérico (tal como &#x20AC; ou &#8364; para o sinal euro ) são interpretados como caracteres Unicode – independentemente de que codificação você utilize para o seu documento. É um erro comum para pessoas que trabalham em conteúdos codificados na página de código Windows 1252, por exemplo, tentar representar o sinal euro utilizando &#x80;. Isto porque o euro aparece na posição 80 (em hexadecimal) na página de código Windows 1252. Utilizar o &#x80; em HTML na verdade deve produzir um caractere de controle, já que o escape seria expandido como o caractere na posição 80 no repertório Unicode. (De fato, os navegadores tendem a silenciosamente corrigir esse erro. Veja as páginas de teste.)

Escapes CSS

O CSS representa caracteres de escape de maneira diferente. Para representar um caractere, comece com uma barra invertida seguida do número hexadecimal que representa o valor de ponto de código Unicode do caractere.

Se houver um caractere seguinte que não esteja na faixa A–F, a–f ou 0–9, isso é tudo que você precisa. O seguinte exemplo representa a palavra emotion.

Exemplo: .\E9motion { ... }

Se, por outro lado, o próximo caractere for um que possa ser utilizado em números hexadecimais, ele não ficará nítido onde o final do número estiver. Nestes casos, há duas opções. A primeira é utilizar um espaço depois do escape. O espaço é parte da sintaxe do escape, e não permanece depois que o caractere de escape é analisado. O seguinte exemplo mostra como você pode representar a palavra edition.

Exemplo: .\E9 dition { ... }

Como alternativa, você pode utilizar um número hexadecimal de 6 dígitos, como ou sem espaço. Aqui está uma maneira alternativa de se escrever edition.

Exemplo: .\0000E9dition { ... }

Pelo fato de qualquer espaço em branco após o número hexadecimal ser engolido como parte do escape, se você de fato quiser que um espaço apareça após o caractere de espaço, terá que acrescentar dois espaços (depois de um número hexadecimal de qualquer comprimento).

A barra invertida também pode ser utilizada em CSS antes de um caractere de sintaxe, para evitar que este seja lido como parte do código. Para mais informações sobre escapes CSS, consulte a especificação CSS 2.1.

Quando não utilizar escapes

É quase sempre preferível utilizar uma codificação que permita representar caracteres em sua forma normal, ao invés de utilizar referências de entidade de caractere ou NCRs.

Utilizar escapes pode tornar difícil ler e manter o código fonte, e também pode aumentar significativamente o tamanho do arquivo.

Muitos desenvolvedores que falam inglês têm a expectativa de que outras línguas apenas façam uso ocasional de caracteres não-ASCII, mas isto está errado.

Tome como exemplo a seguinte passagem em tcheco.

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 você exigisse NCRs para todos os caracteres não-ASCII, a passagem se tornaria incompreensível, difícil de manter e muito mais longa. Seria, certamente, muito pior para uma língua que não utilizasse nenhum caractere latino.

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&#xFD;ch dealer&#x16F; v &#x10C;ech&#xE1;ch a na Morav&#x11B;, kter&#xE9; prob&#x11B;hnou v pr&#x16F;b&#x11B;hu z&#xE1;&#x159;&#xED; a &#x159;&#xED;jna.

Como dissemos anteriormente, utilize caracteres ao invés de escapes para textos comuns.

Utilize em XHTML. Utilizar referências de entidade de caractere em um documento que é analisado como XML pode se tornar um problema se as entidades forem definidas externamente ao seu documento e as ferramentas que processam o XML não lerem os arquivos externos. Em tais casos, as referências de entidade não serão substituídas por caracteres. Por esta razão, se você precisar utilizar escapes, pode ser mais seguro utilizar referências de caractere numérico, ou definir as entidades de caractere que você precisa dentro do documento.

Se utilizar referências de entidade de caractere definidas em HTML (tal como &aacute;) para representar caracteres em XHTML, você deve tomar cuidado toda vez que seu conteúdo for processado utilizando analisadores XML ou outras ferramentas.

Quando utilizar escapes

Caracteres de sintaxe. Há três caracteres que devem sempre aparecer no conteúdo como escapes, de modo que eles não interajam com a sintaxe da marcação. Eles são parte da linguagem para todos os documentos baseados em XML e para XTML.

Você também pode querer representar a aspa dupla (") como &quot; e a aspa única (') como &apos; – particularmente em textos de atributos, quando você precisa utilizar o mesmo tipo de aspas que as que cercam o valor do atributo. Observe, no entanto, que embora isto seja parte da linguagem XML, &apos; não é definido em HTML 4.01 e alguns navegadores não suportam &apos; em HTML. Por esta razão, a especificação XHTML recomenda, ao invés disso, a utilização de &#39; se o texto puder ser passado para um navegador HTML.

Falhas de codificação. Escapes podem ser úteis para representar caracteres não suportados pela codificação que você escolher para o documento, por exemplo, para representar caracteres chineses em um documento ISO Latin 1. Primeiro você deve se perguntar, no entanto, porque você não mudou a codificação do documento para algo que cubra todos os caracteres que você precisa (tal como, é claro, UTF-8).

Problemas de entrada. Se sua ferramenta de edição não permitir que você digite com facilidade os caracteres necessários, você também pode recorrer à utilização de escapes. Observe que esta não é uma solução a longo prazo, nem uma que funcione bem se você tiver que digitar muitos de tais caractere – ela leva mais tempo e torna a manutenção mais difícil. Idealmente, você escolheria uma ferramenta de edição que permitisse digitar esses caracteres como caracteres. Como alternativa, se você só precisar de um caractere ocasional, utilze uma ferramenta de mapa de caracteres ou um selecionador de caracteres.

Caracteres invisíveis ou ambíguos. Um papel particularmente útil para os escapes é representar caracteres que sejam invisíveis ou ambíguos em sua apresentação.

Um exemplo seria o caractere Unicode 200F: RIGHT-TO-LEFT MARK. Este caractere pode ser utilizado para esclarecer a direção em textos bidirecionais (como quando se utiliza scripts em árabe ou hebraico). Ele não tem forma gráfica, contudo; portanto é difícil ver onde estes caracteres estão no texto, e se eles estiverem perdidos ou esquecidos podem criar resultados inesperados durante uma posterior edição. Utilizar, ao invés disso, &rlm; (ou seu equivalente NCR &#x200F;) torna muito fácil localizar estes caracteres.

Um exemplo de caractere ambíguo é 00A0: NO-BREAK SPACE. Este tipo de espaço evita a quebra de linha, mas parece com qualquer outro espaço quando utilizado como caractere. Utilizar &nbsp; (ou &#xA0;) torna bastante claro onde tais espaços aparecem no texto.

Utilização de escapes em atributos de estilo

É melhor escolher a codificação certa para que você possa utilizar somente caracteres em declarações CSS. Esta seção endereça o que deveria ser uma circunstância muito rara, onde você pode ter decidido utilizar escapes.

Normalmente é uma boa idéia colocar informações de estilo em uma planilha de estilos esterna ou um elemento de estilos no cabeçalho de um arquivo XHTML ou HTML. Ocasionalmente, ou talvez temporariamente, você pode utilizar um atributo de estilo em um elemento específico, ao invés disso. Em ocasiões ainda mais raras, você pode querer representar um ou mais caracteres no atributo de estilo utilizando caracteres de escape.

Um atributo de estilo em XHTML ou HTML pode representar caracteres utilizando NCRs, entidade ou escapes CSS. Por outro lado, o elemento de estilo em HTML não pode conter nem NCRs nem entidades, e o mesmo se aplica auma planilha de estilos externa.

Por haver uma tendência a se querer mover estilos declarados em atributos para o elemento de estilo ou uma planilha de estilos externa (por exemplo, isto pode ser feito automaticament utilizando uma aplicação ou script), é mais seguro utilizar apenas escapes CSS.

Por exemplo, é melhor utilizar

<span style="font-family: L\FC beck">...</span>

que

<span style="font-family: L&#xFC;beck">...</span>

A propósito

Mudar para a UTF-8 significa salvar seu arquivo novamente. Utilizar uma codificação como a UTF-8 significa que você pode evitar a necessidade da maioria dos escapes e trabalhar apenas com caracteres. Para mudar a codificação de seu documento, no entanto, não é suficiente simplesmente mudar a declaração de codificação no alto da página ou no servidor. Você precisa salvar seu documento nessa codificação novamente. Para ajuda no entendimento de como fazer isso com sua aplicação, leia Estabelecendo a codificação em aplicações de autoria web.

Hex em comparação a decimal. Tipicametne, quando o Padrão Unicode se refere a caracteres ou os lista, ele o faz utilizando um valor hexadecimal. Por exemplo, o ponto de código para a letra á pode ser referida como U+00E1. Dada a prevalência desta convenção, frequentemente é útil, embora não requerido, utilizar valores numéricos hexadecimais em escapes ao invés de valores decimais. Você não precisa utilizar zeros à esquerda em escapes, ou seja,. á pode ser representado como &#xE1;.

Caracteres suplementares. Caracteres suplementares são aqueles cujos caracteres Unicode que têm pontos de código mais altos que os caracteres no Plano Multilingue Básico (BMP - Basic Multilingual Plane). Em UTF-16, um caractere suplementar é codificado utilizando dois pontos de código substitutivos de 16 bits do BMP. Por causa disto, algumas pessoas pensam que os caracteres suplementares precisam ser representados utilizando dois escapes, mas isto está incorreto – você deve utilizar o valor de ponto de código único para tal caractere. Por exemplo, utilize &#x233B4; ao invés de &#xD84C;&#xDFB4;.

"E"s comerciais únicos. Embora agentes usuários de HTML tendem a ignorar isto, você nunca deve ter um E comercial único (&) em seu documento. Você deve prestar atenção especial a URLs que incluem parâmetros. Por exemplo, seu documento deve conter http://example.org/my-script.php?class=guest&amp;name=user, ao invés de http://example.org/my-script.php?class=guest&name=user.

Dê-nos a sua opinião (em inglês).

Subscreva uma alimentação RSS.

Novos recursos

Notícias na página principal

Twitter (Notícias na página principal)

‎@webi18n

Leitura complementar

Autor: Richard Ishida, W3C. Tradutor: Brazilian Portuguese Translation Team, Trusted Translations, Inc..

XHTML 1.0 válida!
CSS válido!
Codificado em UTF-8!

Traduzido de conteúdo em inglês datado de 2010-08-12. Última versão traduzida modificada 2011-04-18 14:03 GMT

Para obter o histórico de alterações do documento, faça uma busca por qa-escapes no blog da i18n.