使用阿拉伯语、希伯来语和其他从右至左书写的文字创建HTML页面(教程)

你为什么应该读这篇文章?

让双向文本正确渲染有时会让人感觉很难,但事实并非如此。如果你感到困惑或者还没有开始,本教程可以帮助你采用最佳方法来标记内容,并充分解释双向算法的工作原理,以便你更好地理解大多数问题的根本原因。我们还会讨论有关处理双向文本标记语言的方法的一些常见误解。

目标

读完本教程你可以学习到:

很多语言都使用从右至左书写的文字,包括阿拉伯语、希伯来语、普什图语、波斯语、信德语、叙利亚语、迪维希语、乌尔都语、意第绪语、维吾尔语、哈萨克语和柯尔克孜语等。

目标读者:想要编写包含由右至左书写的文字(如阿拉伯字母和希伯来字母)的HTML和CSS开发者,或者必须处理嵌入的由右至左书写的文字的读者。

本教程汇总了一些文章,帮助你了解在编写HTML和CSS时如何使用从右至左书写的文字和双向文本。

简言之

如果页面是由右至左书写的,向html标签添加dir属性以设置页面的默认基方向(base direction)。只有在你需要更改基方向时,才需要在页面内的块级元素上使用dir属性。

对于行内文本,将所有相反方向的短语紧紧包裹在设置其基方向的标记中。

使用dir=auto自动设置表单控件、pre元素或插入页面的文本的基方向。如果需要将表单输入的基方向信息传递到服务器,请使用 dirname属性。

在可以使用标记语言的情况下,不要使用CSS或Unicode控制字符来管理书写方向。

使用双向文本的逻辑顺序,而不是视觉顺序,并让Unicode双向文本算法来管理书写方向。

定义

双向文本
行内混合LTR和RTL文本的文本。由右至左书写的文字(例如阿拉伯字母和希伯来字母)通常包含短的由右至左书写的文本(最常见的是拉丁字母),并且一些主要是由右至左书写的文字中数字的方向时由左至右书写的。处理RTL文字时,双向文本是许多困难的来源。
Bidi
“双向文本”(bidirectional)的缩写形式。
RTL
“由右至左”(right-to-left)的缩写形式。
LTR
“由左至右”(left-to-right)的缩写形式。
基方向
为了使文本在显示HTML页面时看起来没有问题,我们需要建立文本的书写方向上下文。我们将这个上下文称为“基方向”(base direction)。
为文本建立正确的基方向至关重要,因为基方向可以使双向文本算法在显示时产生正确的文本顺序。正确指定基方向还可为文本建立正确的默认对齐方式。
在HTML中,基方向由使用dir属性的最近的父元素显式设置。在没有dir属性的情况下,基方向继承自文档的默认方向,即由左至右书写。
Unicode 双向文本算法
Unicode双向文本算法(Unicode Bidirectional Algorithm, UBA),简称为“bidi算法”,是Unicode标准的一部分。该算法描述了确定双向Unicode文本的书写方向时使用的算法,并受到浏览器和其他应用的广泛支持。有关详细信息,请参阅Unicode标准附件#9

HTML中的书写方向

在本节中,我们将介绍关于书写方向的标记语言基础知识。

Unicode双向文本算法基础简要介绍了bidi算法的工作原理,重点介绍了双向文本的相关概念和术语。

HTML中的结构代码和由右至左书写的文本着眼于dir属性在文档级别的基本用法以及HTML中的结构标记,例如段落、表格和表单等等。文章也介绍了HTML5的新发展,包括处理表单元素、pre元素和插入文本的书写方向。

HTML中的行内标记和双向文本首先描述了Unicode双向文本算法需要标记语言帮助的情况。Unicode双向算法是所有浏览器中书写方向控制的基础,但它有其局限性,需要通过标记语言来辅助工作。本文着眼于这些问题并提出了简单的解决方案。这比上一篇文章稍微复杂一些,因为这里必须要处理双向文本。

文本的视觉顺序与逻辑顺序比较了存储双向文本的视觉方法与逻辑方法,并说明了为什么使用逻辑模型。如今,用户通常不太可能需要处理视觉顺序的内容。

CSS和Unicode控制字符

一般来说,你应该使用标记语言而不是CSS或Unicode控制字符来管理HTML中的文本方向,不过在某些时候CSS或Unicode控制字符是唯一的手段。这些文章详细探讨了造成这种情况的原因。

CSS和标记语言对双向文本的支持

Unicode控制字符和标记语言对双向文本的支持讨论了为什么标记语言比Unicode控制字符更好。

对双向文本使用Unicode控制字符说明了如果只能使用Unicode控制字符,如何使用它们。