Esta é minha lista de artigos com a tag "character"

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

Por: Henrique Costa PereiraWednesday 12 April 2006 às 11:12

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://example.org/my-script.php?class=guest&name=user
Certo: http://example.org/my-script.php?class=guest&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.

Comentários: 7

Tags: ISO-8859-1 NCR UTF-8 W3C Web Standards XHTML XML ampersand atributo-title character charset charset-e-encoding encoding entitie escape unicode

Declarando encodings em XHTML

Por: Henrique Costa PereiraTuesday 11 April 2006 às 13:11

Eu já deixei aqui minha contribuição sobre quais as circunstâncias e quais os mime-types podem ser utilizados ao enviar o XHTML no texto “XHTML Media Types“. Se você ler poderá se livrar da culpa (se ela ainda existe) e enviar seu XHTML 1.0 como text/html (e não necessariamente como application/xhtml+xml), assim como a maioria dos documentos da própria W3C faz o uso do XHTML em seus próprios documentos (se você é um bom observador já deve saber disso). Mas se você resolver enviar seu XHTML como application/xhtml+xml, você deve incluir um passo a mais na forma como declara encodings nos seus documentos. Vamos ver como isso funciona passo-à-passo.

Qual a influência do mime-type?

Há algumas maneiras de informar aos user agents qual o encoding que deverá ser utilizado ao renderizar suas páginas para que você não venha a ter problemas presentes e futuros. Seja usando um mime type onde seu HTML ou XHTML será tratado como HTML puro (ou seja text/html), ou enviando seu XHTML como XML usando o mime-type xhtml+xml. A diferença entre os dois é que documentos de XHTML enviados como XML devem por recomendação conter uma declaração de XML acima do Doctype. Basicamente essa é a difença entre HTML e XHTML na hora de declarar seu encoding.

header HTTP

Utilize o parâmetro charset no content type header do HTTP que é enviado pelo servidor. Há várias formas de se fazer isso dependendo do servidor e da tecnologia que você usa. Você deve verificar qual a melhor maneira de fazer isso em cada contexto. O meu site por exemplo envia um content-type da seguinte maneira:

content-type: application/xhtml+xml; charset=utf-8

Deste modo, as configurações enviadas no header HTTP vão sempre prevalecer sobre as outras formas de declarar encodings, mas isso não exclui a necessidade de cumprir os passos seguintes.

Declaração de XML

Se for um XML que você está enviando (incluindo o XHTML quando enviado com o application/xhtml+xml mime-type), você deve usar o prolog de XML acima do seu doctype da seguinte maneira:

<?xml version="1.0" encoding="utf-8"?>

Meta Tag

Para o HTML e XHTML, independente do mime-type, utilize a meta tag http-equiv da seguinte maneira:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

É muito importante ressaltar que o header HTTP sobrepõe o encoding que você declara na meta tag e na declaração de XML, ou seja, essas três formas de declarar um encoding não são equivalentes. Os user agents vão considerar cada uma dessas formas de informar o encoding superior a outra da seguinte maneira.

Se nenhuma informação sobre o encoding não for enviada via header HTTP, o user agent vai passar a considerar a declaração de XML como a informação correta. Mas se alguma informação for enviada via header, ela vai sobrepor as formas seguintes de declaração. E se nem a declaração de XML for encontrada e nenhuma informação for enviada pelo header, a informação contida no HEAD do seu documento na forma de meta tag será utilizada para informar ao user agent, qual o encoding deve ser utilizado.

Verifique o que é enviado

Por isso é sempre bom saber qual o encoding que seu servidor está enviando para o browser antes de vasculhar seu HTML atrás de erros. Você pode verificar as informações sobre codificação de caracteres enviadas pelo HTTP de um documento, utilizando o Mozilla Web-Sniffer. O documento da W3C “The HTTP charset parameter” ensina como manipular as informações de encodings enviadas pelo seu servidor em diversas tecnologias. Não deixe de ler.

Sempre declare o encoding desejado, através do header HTTP e das declarações no seu documento em si. Se você não declarar as chances dos caracteres do seu site serem renderezidados incorretamente em um cliente ou outro são grandes.

Quirks Mode

A recomendação, é que as três formas de declarar o encoding seja utilizada em um documento de XHTML enviado com mime-type xhtml+xml e para o HTML não é necessário utilizar a declaração de XML acima do doctype. Se usar essa declaração, você deve saber das consequências disso, ao colocar seu documento no modo de renderização quirks e complicar sua vida. A melhor maneira é usar algo como um content-negotiation, para administrar o que é ou não enviado para o Internet Explorer. A não ser que você goste de se divertir desenvolvendo projeto em Quirks.

Referências

O que é quirks Mode: Post que eu escrevi sobre renderização quirks

Standards vs Quirks modes: Leia este interessante documento da W3C.

Content Type: texto muito interessante que eu encontrei no Lachy que dá algumas dicas sobre como tratar charsets no lado do servidor.

HTTP Head: Ferramenta da W3C para você poder ver o header que seu servidor envia aos user agentes e que também te permite verificar qual enconding seu servidor envia.

The HTTP charset parameter: Documento de leitura obrigatória para entender a fundo como ter o controle sobre como seu servidor transmite um charset.

Comentários: 5

Tags: HTTP Internet Explorer User Agent W3C Wasp Web Standards XHTML XML character charset charset-e-encoding encoding media-types mime-type quirks-mode text-html xhtml+xml

Charsets e encodings

Por: Henrique Costa PereiraMonday 10 April 2006 às 13:10

Introdução

Dividi o assunto de charsets e encodings em uma série de artigos que poderão ser acessados (a medida que forem publicados) apenas clicando na tag charset-e-encoding. A lista dos textos em ordem é a seguinte:

  1. Charsets e encodings
  2. Declarando encodings em XHTML
  3. Usando entities e referências numéricas de caracteres – NCR
  4. Configurando encodings em ferramentas de desenvolvimento
  5. Declaração de codificação de caracteres por CSS

Enquanto escrevia este texto, aos poucos ele foi tomando dimensões maiores do que eu esperava. Um hyperlink me levou a um documento, um documento me levava a outro, cada vez mais longe e assim por diante. Vários trechos são traduções pessoais dos documentos originais mesclados com partes de minha própria autoria. Todas as referências foram citadas em seus devidos trechos e a maioria foi comentada no tópico referências, no final de cada artigo.

Espero que nestes artigos você encontre tudo o que precisa saber sobre charsets e encodings em um verdadeiro dossiê sobre o assunto. Sua opinião e seus comentários continuam sendo muito valiosos. Aguardo seu feedback.

Conceitos

Para saber utilizar charsets e encodings de forma mais madura e menos arriscada, é necessário compreender alguns conceitos e definições para poder entender tudo o que precisa sobre codificação de caracteres em linguagens de marcação como o XML e HTML. Então vamos aos conceitos.

Charset

Charset significa “conjunto de caracteres” (character set), e é comumente referênciado apenas como “charset”. Os charsets foram feitos como uma biblioteca de caratecteres que podemos utilizar, para serem utilizados com propósitos gerais em computadores, softwares, browsers etc.

Os charsets mais conhecidos são os da série ISO-8859 (ISO-8859-1, ISO-8859-2, ISO-8859-3, …, ISO-8859-10) e os da família Unicode (UTF-8, UTF-16, UTF-32).

Code Caracter Set (code points)

Em cada conjunto de caracteres (charsets), para cada caractere existe um número único designado para identificação. Essas unidades númericas são chamadas de “code points“. Por exemplo a letra “a” no encoding ISO 8859-1 está na posição de número 65, e assim por diante com cada caractere do conjunto.

Encoding

O “character encoding”, ou apenas “encoding” é a maneira com que os conjuntos de caracteres são mapeados e manipulados pelas máquinas, seja um software, seja um browser etc. Vamos entender como isto funciona.

No encoding ISO 8859-1 a letra “A” está na posição 65º (começando do zero) e pode ser representado no computador usando um único byte com valor de 65. Para o ISO 8859-1 isso nunca muda. Para os encodings da série unicode, as coisas não são tão diretas assim. Embora o code point para a letra “à” no charset unicode seja sempre 255 (em decimal), ele pode ser representado em um computador por 1, 2 ou até 4 bytes, dependendo do encoding utilizado (UTF-8, UTF-16 ou UTF-32). Ou seja, usando o charset unicode, é possível que um caractere seja codificado de formas diferentes dependendo do encoding escolhido.

O XML e o HTML (da versão 4 em diante), foram criados com um modelo lógico na forma como são processados, baseados no Unicode. Isso não significa que todo HTML e todo XML deve ser codificado com algum encoding da série Unicode. Significa entretando que os documentos podem conter somente caracteres definidos pelo unicode. Qualquer caractere pode ser codificado em um documento contanto que ele seja um subconjunto do repertório do unicode. No nosso caso que utilizamos caracteres latinos, uma outra soluções aceitável para ser utilizada no lugar de algum encoding da série unicode seria o ISO-8859-1, onde todos seus caracteres, também fazem parte da série unicode.

Unicode

Unicode é um conjunto de caracteres (”character set” ou apenas “charset”), ou seja um padrão que define em um único conjunto, todos os caracteres necessários para escrever a maioria das línguas atuais em uso em computadores hoje. O unicode tem o objetivo de ser um super conjunto de todos os caracteres já codificados em outros conjuntos.

Existe um consórcio internacional sem fins lucrativos, fundado só para ampliar e promover o uso do unicode no mundo. Leia sobre o consórcio em português para mais informações.

É importante distinguir a diferença entre conjunto de caracteres (”character set” ou apenas “charset”) e codificação de caracteres (”character encoding” ou apenas “encodings”), que justifica o título deste artigo. O unicode é um tipo de charset, ou seja, um tipo de conjunto de caracteres dentre outros, como os da série ISO-8859. E dentro do charset unicode, existem 3 encodings conhecidos como UTF-8, UTF-16, UTF-32 que podem ser utilizados. O encoding UTF-8 da série unicode é a recomendação mais amplamente utilizada.

Todo o jargão necessário para entender charsets e encodings foi definido aqui. Nos próximos textos vamos ver uma aplicação mais prática sobre este assunto e a melhor forma de configurar encodings nos seus projetos.

Referências:

Se você está acostumado a desenvolver user agentes (apenas por diversão) e realmente precisa se aprofundar sobre este assunto o texto UTF-8, a transformation format of ISO 10646 de Yergeau e Character Set considered harmful de Dan Connolly do MIT são dois textos obrigatórios que pode tirar suas noite de sono.

Comentários: 16

Tags: HTTP ISO-8859-1 UTF-8 User Agent W3C XHTML XML ampersand character charset charset-e-encoding encoding entitie mime-type quirks-mode text-html unicode xhtml+xml



Paginação:



Assine por feed

assinantes Assine o feed do Revolução Etc

Sobre o Revolução Etc

Foto do autor Henrique Costa Pereira O Revolução Etc é o site pessoal do Henrique C. Pereira que trabalha com design de interfaces, planejamento, arquitetura da informação e desenvolvimento para web. Ele escreve aqui sobre várias coisas relacionadas com acessibilidade, web standards, tecnologia, desenvolvimento e o que mais der na telha, além de eventualmente escrever alguma coisa ou outra para o Webinsider. Leia mais.

Livros que vão colocar minhocas na sua cabeça:

  • SEO Otimização de Sites - Paulo Teixeira
  • Não me faça pensar! - Steve Krug
  • Google Adwords a Arte da Guerra - Ricardo Vaz Monteiro
  • Design para Internet: Projetando a Experiência Perfeita - Felipe Memoria
  • Sopro no Corpo: Vive-se de Sonhos - Marco Antônio de Queiroz (MAQ)
  • 250 Segredos para Web Designers - MOLLY E. HOLZSCHLAG
  • O design do dia a dia - DONALD A. NORMAN
  • Ser e o Nada - Jean-Paul Sartre
  • Apocalípticos e Integrados - Umberto Eco
  • Ergodesign e Arquitetura de Informação - LUIZ AGNER
  • The Art and Science of Web Design - Jeffrey Veen
  • Ansiedade de Informação 2 - RICHARD SAUL WURMAN
  • Criando Páginas Web com CSS - ANDY BUDD, CAMERON MOLL, SIMON COLLISON
  • Mobile Web Design - Cameron Moll
  • Sigam-me no Twitter

Me encontre

Lugares onde digitalmente eu costumo estar presente.

Anúncios

Blogroll:

Alguns sites interessantes e blogs de amigos que eu leio com frequência. Em ordem alfabética.

Pessoas que trabalham comigo:

Sites dos colegas de trabalho na Webroom.

Já trabalharam comigo:

Som que faz a minha cabeça!

Procurando inspiração? Esta é uma breve lista do que eu ouço!

  • Diana Krall - The Very Best Of
  • U2 - How to dismantle an atomic bom
  • U2 - 18 singles
  • The Essential - Bob Dylan
  • Bob Dylan - Modern Times
  • Miles Davis - Cool & Collected
  • Miles Davis - Prestige Profiles Vol 1
  • Pink Floyd - The Division Bell
  • Pink Floyd - The wall
  • Pink Floyd - Delicate Sound Of Thunder
  • John Coltrane - The Best of John Coltrane
  • The beatles - The Beatles 1