1

LTR ページに RTL テキストをインラインで表示する必要があります。

国名を MySQL データベースの 1 つのフィールドに EnglishName (LocalLanguageName) の形式で格納しています。ローカル言語が RTL テキストの場合、PHP によって作成された出力が壊れます。

たとえば、イスラエルは次のようにデータベースに保存されます。

Israel (ישר×ל)

私のPHPコードは次のとおりです。

print "<li>$row[Country], ";
print date('jS M Y',strtotime($row[StartDate]));
print "</li>\n";

どの出力:

<li>Israel (ישראל), 1st Jan 2013</li>

日付変更線を削除すると、閉じ括弧とカンマが正しい位置にあります。

"x".日付の前に置くと、期待される結果が得られます。

<li>Israel (ישראל), x1st Jan 2013</li>

出力 html が正しくないためdir="LTR"、要素への追加が機能しません。<li>

の出力を取得するにはどうすればよい<li>LTR name (RTL name), date</li>ですか?

ありがとう

4

2 に答える 2

1

アラビア文字はパーサーを RTL モードに設定し、句読点は無視され、英語のアルファベットの文字はパーサーを LTR モードに戻します (これがx、OP で述べたように文字を追加して出力を「修正」する理由です) が、数字は引き続き考慮されます。 RTL であるため、日付の数字は RTL 文字列の一部と見なされ、句読点),はそれらの間に巻き込まれます。

UTF-8 の左から右へのマーカーを使用して、パーサーを強制的に LTR モードに戻すことができます。

print "<li>$row[Country]\xe2\x80\x8e, ";

結果は次のとおりです。

<li>Israel (ישראל)‎, 1st Jan 2013</li>
于 2013-03-29T19:01:00.840 に答える
1

PHP とはあまり関係がありませんが、HTML と Unicode 双方向アルゴリズムとは関係があります。国名の後に必ず数字を付けているように見えますが、アルゴリズムは異なる方向性を持つ単語に隣接する数字に魔法をかけます。この魔法は役に立つ場合もあれば、そうでない場合もあります。

一般的な環境のほとんどが英語である場合、最も簡単な方法は、HTML エンティティ ‎ を追加することです。国名の後の閉じ括弧の後。条件さえ必要なく、すべての国名の後にそれを行うことができます-左から右の国名の後では害はありません.

より洗練された方法は、HTML タグ <bdi> に括弧内の部分を含めて国名を入れることです。これは「双方向分離」を意味します。簡単に言えば、これは <span> タグのようなものですが、回答の冒頭で述べた双方向の魔法を防ぐ方法でコンテンツを分離します。より洗練された方法ですが、この方法には欠点があります。Microsoft Internet Explorer では機能しません (来るのを見ましたか?)。Microsoft Internet Explorer をあまり気にしない場合は、<bdi> を使用することをお勧めします。

于 2013-03-29T19:01:32.797 に答える