【问题标题】:How to solve BiDi bracket issues?如何解决双向支架问题?
【发布时间】:2011-08-13 16:41: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>

问题可以看这里:

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

【问题讨论】:

    标签: html css rendering bidi


    【解决方案1】:

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

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

    第二个问题: 这里没有问题,从您提供的源代码中简单看一下,您似乎已经正确提供了括号。但实际上,应该在 RTL 文本之后和结束

    之前的右括号实际上是在起始 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 属性,这就是工作与不工作之间的所有区别。

    【讨论】:

    • 感谢详细的解释;真的很有帮助...作为世界其他地方的参考,这也是一个很好的链接:w3.org/International/questions/qa-bidi-controls
    • 在您有一个下拉列表并且 ltr 更改不仅仅是括号的情况下,这些都不起作用,它会反向呈现下拉列表。我正在寻找一个解决方案,其中下拉列表仍然是 rtl 但里面的文本是 ltr 或者只是任何不会弄乱括号的解决方案。
    • 将下拉列表本身作为 LTR,然后将
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我不知道如何,但 unicode-bidi: plaintext; 为我工作
      • unicode-bidi:明文应该是最好的选择。特别是对于您可以同时拥有 rtl 和 ltr 方向的情况
      【解决方案4】:

      silkfield 的回答引导我进入 this 页面,该页面显示了 BiDi 布局可能存在的许多问题,包括括号问题

      【讨论】:

      • 哇!我使用 Windows 十年了,但我没有注意到我可以通过右键单击插入这些字符。非常感谢您提供的图片。
      猜你喜欢
      • 2013-02-02
      • 1970-01-01
      • 2010-10-24
      • 2019-02-11
      • 1970-01-01
      • 2021-09-25
      • 2023-04-08
      • 1970-01-01
      • 2011-06-09
      相关资源
      最近更新 更多