30

ご存知かもしれませんが、一部の言語は右から左に書かれたり読み取られたりしており、いくつかの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>

ここで問題を見ることができます:

ここに画像の説明を入力してください

だから私はその最後のブラケットを最後に残したい。あなたの解決策は何でしょうか?

4

4 に答える 4

22

ここには多くの問題があります。Unicode標準によると、ブラケットはニュートラルです。つまり、ブラケットは本質的にLTRまたはRTLとして扱われません。彼らは周囲の言語の方向性を取ります。正しくレンダリングされていない例では、閉じ括弧の方向は英語と同じ、つまりLTRであると想定されています。

最初の問題:段落をRTLとして扱う必要があることをブラウザに伝えます。ブラウザはLTRである英語を内部で検出するため、英語はRTL段落内に埋め込まれていると見なされ、最後の文字「)」はRTLとして扱われます。(周囲の段落はRTLです)。

2番目の問題:ここでは問題はありません。提供したソースコードを簡単に見ると、角かっこが適切に提供されているように見えます。ただし、実際には、RTLテキストの後、終了</ P>の前にあるはずの閉じ括弧は、実際には開始RTLテキストの前にあります。正しく入力すると、間違って表示されます(使用しているテキストエディタは、終了ブラケットがユニコードによるLTRであると想定しているため)。これを確認するには、内容をエディターにコピーし、「problem:」の最後にカーソルを置き、右矢印を繰り返し押して、最後の角かっこの位置を確認します。

これ以上説明することなく、これを機能させるためのいくつかの例を次に示します。

<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"が動作するので、両方の例を示しました。また、基本的に2番目の問題を解決する必要があると想定しているため、主にLTRドキュメントにRTLテキストが含まれているため、最後の2つの例を示します。

注:最後の2つの例が探しているものであり、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

シルクフィールドの答えは、ブラケットの問題を含むBiDiレイアウトで起こりうる問題の多くを示すこのページに私を導きました

ここに画像の説明を入力してください

于 2012-09-04T12:03:19.027 に答える
2

あなたはあなたの問題のために次のcssをbodyタグに入れることができます" unicode-bidi:embed "、それはうまくいくでしょう

于 2012-07-18T11:05:27.257 に答える