Html 如何解决BiDi括号问题?

Html 如何解决BiDi括号问题?,html,css,rendering,bidi,Html,Css,Rendering,Bidi,正如您可能知道的,有些语言是从右向左写/读的,我们正在尝试支持一些RTL语言。对于web UI,在html中使用dir=“rtl”可以完成大部分工作,这要归功于浏览器的算法。但我在文本中遇到了这个问题: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Bracket problems with BiDi</titl

正如您可能知道的,有些语言是从右向左写/读的,我们正在尝试支持一些RTL语言。对于web UI,在html中使用dir=“rtl”可以完成大部分工作,这要归功于浏览器的算法。但我在文本中遇到了这个问题:

<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>

BiDi的括号问题
括号问题:hello(世界):

无括号问题:hello(世界)某物:

支架问题

无支架问题:无支架问题

问题可以在这里看到:


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

这里有很多问题。根据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>

BiDi的括号问题
支架问题不再:你好(世界):

支架问题不再:你好(世界):

支架问题不再存在

支架问题不再存在:الام(عليم)

支架问题不再存在:الام(عليم)

style=“direction:ltr;”和dir=“ltr”的工作方式不同,所以我给出了两个例子。另外,因为我假设您基本上需要解决第二个问题,即您主要在另一个ltr文档中使用RTL文本,所以我提供了最后两个例子


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

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

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

你好(世界)和"x200E,


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

您可以为您的问题添加以下css
unicode bidi:embed”在body标签中,它会很好地工作

希尔克菲尔德的回答引导我进入页面,页面显示了bidi布局的许多可能问题,包括括号问题


感谢您的详细解释;非常有帮助……作为世界其他地方的参考,这也是一个很好的链接:如果您有下拉列表,并且ltr的更改不仅仅是括号,那么这些链接都不起作用,它会将下拉列表呈现为相反的形式。我正在寻找一种解决方案,其中下拉列表仍然是rtl,但是里面的文本是ltr或任何不会弄乱括号的解决方案。将下拉列表本身作为ltr,然后将其中的每个项目作为RTL?如果这不能解决问题,你应该发布一个问题。我相信有人能够帮助你。哇!我使用Windows十年了,但我没有注意到我可以简单地使用ri插入这些字符点击右键。非常感谢这些图片。我不知道怎么做,但unicode bidi:纯文本;对我有用