30

正如您可能知道的那样,有些语言是从右到左书写/阅读的,我们正在尝试支持一些 RTL 语言。对于在 html 中使用 dir="rtl" 的 Web UI,由于浏览器具有的算法,大部分工作都完成了。但是我在文本中遇到了这个带有括号的问题:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Bracket problems with BiDi</title>
</head>
<body>

<p style="direction: rtl;">Bracket problem: hello (world):</p>
<p style="direction: rtl;">No bracket problem: hello (world) something:</p>
<p style="direction: rtl;">Bracket problem: (السلام (عليكم </p>
<p style="direction: rtl;">No bracket problem: السلام (عليكم) عليكم </p>

</body>
</html>

问题可以在这里看到:

在此处输入图像描述

所以我希望最后一个括号留在最后。你的解决方案是什么?

4

4 回答 4

22

这里有很多问题。根据 unicode 标准,括号是中性的,这意味着它们本质上不被视为 LTR 或 RTL。他们采用周围语言的方向。在错误呈现的示例中,右括号的方向被假定为与英语相同,即 LTR。

第一个问题:您告诉浏览器该段落应被视为 RTL。浏览器在里面找到英文,也就是LTR,所以它认为英文是嵌入在一个RTL段落中,最后一个字符“)”被视为RTL。(周围的段落是 RTL)。

第二个问题:这里没有问题,从你提供的源代码来看,你已经正确地提供了括号。但实际上,应该在 RTL 文本之后和结束 </P> 之前的右括号实际上是在起始 RTL 文本之前。如果输入正确,它看起来会出错(因为您使用的文本编辑器根据 unicode 假定结束括号是 LTR)。要验证这一点,请将内容复制到编辑器中,将光标放在“问题:”的末尾,然后反复按向右箭头并观察最后一个括号的位置。

在不提供更多解释的情况下,这里有一些示例可以使其正常工作:

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Bracket problems with BiDi</title>
</head>

<body>
  <p style="direction: rtl;"><span dir="ltr">Bracket problem no more: hello (world):</span></p>
  <p style="direction: rtl;"><span style="direction: ltr; unicode-bidi: embed">Bracket problem no more: hello (world):</span></p>
  <p style="direction: rtl;">Bracket problem no more: السلام (عليكم)</p>

  <!-- style for p tag below is ltr by default -->
  <p>Bracket problem no more: <span dir="rtl">السلام (عليكم)</span></p>
  <p>Bracket problem no more: <span style="direction: rtl; unicode-bidi: embed">السلام (عليكم)</span></p>
</body>
</html>

style="direction: ltr;" 的方式有所不同 有效且 dir="ltr" 有效,所以我给出了两者的例子。另外,因为我假设您基本上需要解决您的第二个问题,您主要在其他 LTR 文档中包含 RTL 文本,所以我提供了最后两个示例。

注意:如果最后两个示例是您要查找的内容,并且您将使用 CSS,则 unicode-bidi 属性是必需的,这就是工作和不工作之间的所有区别。

于 2011-04-27T11:35:30.657 回答
14

您只需要在最后一个括号后添加 LRM 字符。HTML 实体:&#x200E;

<html dir="rtl">
<body>
<p>hello (world)&#x200E;</p>
</body></html>

这告诉浏览器将括号解释为从左到右的阅读。

于 2011-10-28T15:58:05.120 回答
4

Silkfield 的回答将我带到了页面,该页面显示了 BiDi 布局可能存在的许多问题,包括支架问题

在此处输入图像描述

于 2012-09-04T12:03:19.027 回答
2

您可以将以下 css 用于您的问题“ unicode-bidi:embed ”在正文标签中,它会正常工作

于 2012-07-18T11:05:27.257 回答