2011-04-27 51 views
24

正如您所知,有些語言是從右向左書寫/閱讀的,我們正在嘗試支持一些RTL語言。對於在html中使用dir =「rtl」的Web UI,由於瀏覽器具有的算法,大部分工作都可以完成。但是,我在文字碰到這個問題用括號:如何解決BiDi支架問題?

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

問題可以在這裏看到: Screenshot

所以我想,去年支架留在最後。你的解決方案是什麼?

回答

20

這裏有很多問題。根據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> 

中有差異如何風格=「方向:LTR;」作品和dir =「ltr」的作品,所以我舉了兩個例子。另外,因爲我假設你基本上需要解決第二個問題,在其他LTR文檔中主要包含RTL文本的地方,我提供了最後兩個示例。

注意:如果最後兩個示例是您正在查找的內容,並且您將要使用CSS,則需要unicode-bidi屬性,並且這使得工作與非工作之間的所有區別。

+1

感謝您的詳細解釋;真的有幫助...作爲世界其他地方的參考,這也是一個很好的鏈接:http://www.w3.org/International/questions/qa-bidi-controls – erdogany 2011-04-28 10:57:26

+0

這些都不是在你有一個下拉列表和ltr的變化不僅僅是括號內的變化,它還會反過來顯示下拉。我正在尋找一個解決方案,其中下拉列表仍然是rtl,但裏面的文本是ltr或任何解決方案,不會弄亂括號。 – Nick 2014-09-18 10:08:51

+0

將自己的下拉列爲LTR,然後將每個

12

您只需要在最後一個括號後添加LRM字符。 HTML實體:&#x200E;

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

這告訴瀏覽器將括號解釋爲從左到右的讀數。

1

你可以把下面的CSS您的問題 「Unicode的比迪:嵌入」在身上的標籤,它會正常工作

+0

我不知道如何,但** unicode-bidi:明文; **爲我工作 – Suresh 2017-11-10 06:00:58

4

silkfield的回答使我上this網頁,其中顯示了許多可能的BiDi佈局包括支架問題的問題

enter image description here

+0

哇!我正在使用Windows十年,但我沒有注意到我可以簡單地使用右鍵單擊插入這些字符。非常感謝這些圖像。 – PHPst 2013-03-28 11:55:49