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 à W3C, como indicado abaixo.

Tradutor: Portuguese Translation Team, Trusted Translations, Inc.

s_gotoW3cHome Internacionalização
 

Perda de espaço bidi

Público alvo: usuários, codificadores de XHTML/HTML (usando editores ou scripts), desenvolvedores de scripts (PHP, JSP, etc.), codificadores de CSS, desenvolvedores de esquemas (DTDs, XML Schema, RelaxNG, etc.), desenvolvedores de XSLT, gerentes de projetos da Web, e todos que não tenham experiência com a internacionalização e precisem de orientação sobre tópicos a serem considerados e formas de se conseguir o material no site.

Pergunta

Por que meu navegador perde espaços entre texto em caracteres latinos e caracteres árabes/hebraicos?

Informações

Os espaços entre caracteres latinos e caracteres árabes/hebraicos podem parecer que desaparecem se o texto for seguido por um espaço em branco dentro de um elemento de alinhamento que inclua um atributo dir.

Por exemplo, em tais navegadores o código:

<p dir="rtl"> العالمية <span dir="ltr">(W3C) </span> تخلق قواعد </p>

produziria um resultado que se pareceria com o seguinte, onde a seta indica o local do espaço que falta:

Imagem do resultado, mostrando que não há espaço à esquerda do texto em caracteres latinos.

Repare que este efeito também ocorre quando texto da direita para a esquerda é incorporado em uma passagem da esquerda para a direita.

Resposta

Se a seção anterior descreve a aparência de seu código, a solução é remover todos os espaços antes do tag final do elemento em alinhamento, ou remover o atributo dir (se apropriado).

Por exemplo, remover o espaço entre (W3C) e </span>:

<p dir="rtl"> العالمية <span dir="ltr">(W3C)</span> تخلق قواعد </p>

produziria um resultado com a seguinte aparência:

Imagem do resultado, mostrando espaços em ambos os lados do texto em caracteres latinos.

Repare também que, neste exemplo, o atributo dir="ltr" no elemento <span> ao redor do texto (W3C) não é de fato necessário para produzir o ordenamento correto. Não incluir o atributo ou nem uma parte do elemento span também resolverá o problema.

Como parece para mim?

Os quadros a seguir mostram exemplos de códigos seguidos por uma implementação desse código nessa página, para que você possa testar o comportamento de seu agente de usuário atual.

Código: <p dir="rtl"> العالمية <span dir="ltr">(W3C) </span> تخلق قواعد </p>

العالمية (W3C) تخلق قواعد

Código: <p dir="rtl"> العالمية <span dir="ltr">(W3C)</span> تخلق قواعد </p>

العالمية (W3C) تخلق قواعد

Código: <p dir="rtl"> العالمية <span>(W3C) </span> تخلق قواعد </p>

العالمية (W3C) تخلق قواعد

Código: <p dir="rtl"> العالمية <span>(W3C)</span> تخلق قواعد </p>

العالمية (W3C) تخلق قواعد

Código: <p dir="rtl"> العالمية (W3C) تخلق قواعد </p>

العالمية (W3C) تخلق قواعد

A propósito

Somente leia esta seção se você quiser saber os detalhes terríveis sobre o porque de disso acontecer.

O comportamento esperado quando o texto é exibido não se descreve em detalhes nas especificações XHTML/HTML, mas é descrito em especificações CSS recentes. Apesar dos exemplos nesta página não usarem CSS, os mesmos princípios se aplicam. A parte a seguir é tomada do Esboço de Trabalho CSS 2.1:

  1. Se 'white-space' é configurado em 'normal', 'nowrap', ou 'pre-line',
    1. toda tabulação (U+0009) é convertida em um espaço (U+0020)
    2. todos os espaços (U+0020) seguindo outro espaço (U+0020) — até mesmo um espaço antes de um alinhamento, se esse espaço tem 'white-space' for configurado em 'normal', 'nowrap' ou 'pre-line' — serão removidos.

Dado um cenário como se segue (onde as cores representam espaços, U+0020, para fácil identificação):

<ltr>A <rtl> B </rtl> C</ltr>

a especificação diz que o espaço após A é mantido, o espaço antes de B é removido, o espaço após B é mantido, o espaço antes de C é removido. Então, isso é produzido de acordo com o algorítimo bidirecional Unicode, e o resultado final é:

A  BC

Repare que há dois espaços entre A e B! Os níveis incorporados podem ser expressos como segue:

11221

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: 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 2003-11-06. Última versão traduzida modificada 2009-03-05 10:31 GMT

Para obter o histórico de alterações do documento, procure qa-bidi-space no blog da i18n.