如何解决BiDi支架问题?

yus*_*suf 29 html css rendering bidi

您可能知道某些语言是从右到左编写/读取的,我们正在尝试支持某些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>
Run Code Online (Sandbox Code Playgroud)

问题可以在这里看到: 截图

所以我希望最后一个支架留在最后.你的解决方案是什么?

Raz*_*aze 22

这里有很多问题.根据unicode标准,括号是中性的,这意味着它们本身并不被视为LTR或RTL.他们采取周围语言的方向.在错误渲染的示例中,假设右括号的方向与英语相同,即LTR.

第一个问题:您告诉浏览器该段落应该被视为RTL.浏览器在里面找到英文,即LTR,因此它认为英语嵌入在RTL段落中,最后一个字符")"被视为RTL.(周围的段落是RTL).

第二个问题:这里没有问题,只需简单查看您提供的源代码,就会显示您已正确提供了括号.但事实上,这应该是RTL文本之后和闭合之前闭合支架</ P>实际上是起始RTL文本之前.如果你正确地键入它,它看起来错误(因为你正在使用的文本编辑器假设尾架是LTR根据Unicode).要验证这一点,请将内容复制到编辑器上,将光标放在"问题:"的末尾,然后反复按右箭头并观察最后一个括号的位置.

在没有给出更多解释的情况下,这里有一些例子可以解决这个问题:

<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>
Run Code Online (Sandbox Code Playgroud)

style ="direction:ltr"的方式有所不同 works和dir ="ltr"有效,所以我给出了两者的例子.另外,因为我认为你基本上需要解决你的第二个问题,你主要在其他LTR文档中有RTL文本,我提供了最后两个例子.

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


fre*_*der 14

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

<html dir="rtl">
<body>
<p>hello (world)&#x200E;</p>
</body></html>
Run Code Online (Sandbox Code Playgroud)

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