RTL方向的文本字段输入数字显示输出错误

时间:2013-07-22 05:28:01

标签: html css forms bidi

我正在尝试在我的网络应用中支持RTL方向(用于阿拉伯语)。我的文本域发生了一件奇怪的事情。当我输入AAAA BBBB CCCC DDDD时,我在文本字段中获得了正确的显示,但是当我尝试输入数字时,我得到了一个奇怪的输出。假设我的html代码只包含

<input type="text" size="30"/>

我的css包含

body {
    direction: rtl;
}

尝试输入

AAAA BBBB CCCC DDDD - 注意输出是正确的。

尝试输入

1111 2222 3333 4444 - 注意文本字段中发生的事情。

我希望有人可以帮助我。谢谢!

注意:我不能在此使用javascript,因为这适用于移动浏览器。特别是低端设备。

3 个答案:

答案 0 :(得分:1)

尽管阿拉伯语是从右到左书写的,但是各个数字组(例如“123”)按原样写入。例如:

<-- reading direction
456 123

获取解释为“123后跟456”。

另外,据我所知,使用字母A-Z会影响分组编号的编写方式;跟随这些字母表的数字组是从左到右书写的,例如, “abc 123 456”按预期出现。

答案 1 :(得分:0)

“奇怪”的事情似乎是输入1111 2222 3333 4444出现,因此1111是最右边,2222是左边的等等。这是{{1}的正确的行为}。数字具有弱中性,并且在没有具有强方向性的字符的情况下,数字串根据方向性集(此处为direction: rtl)运行。 Unicode Bidirectional Algorithm指定了这一点。如果先输入一个拉丁字母,然后输入数字,请注意事情是如何变化的。

如果页面应该具有从右到左的方向性,那么这种方向性的规则通常也应该应用在文本输入字段中。如果您希望文本字段具有从左到右的方向性,由于某种原因,请在其上设置HTML属性rtl。 (通常最好使用HTML而不是CSS来实现方向性,因为方向性不仅仅是一个可选的表示建议,而是写作系统规则的一部分。)

答案 2 :(得分:0)

使用此类:

.number_ltr {
    direction: ltr!important;
    unicode-bidi: embed;
}

因此您的HTML代码应如下所示:

<input class="number_ltr" type="text" size="30"/>