1

私のウェブサイトには、「Welcome username .」と表示されるヘッダーがあります。

<span>Welcome <?php echo $username; ?>.</span>

問題は、ユーザーが自分の名前を U+202Eusername (U+202E は右から左へのオーバーライド文字、または RLO) に変更すると、すべてのレイアウトが壊れることです。

「Welcome emanresu .」の代わりに、 「Welcome . emanresu」とか「.emanresu Welcome」とか、そんな感じで表示されます。ユーザー名の後に U+202C (ポップ方向の書式設定または PDF) 文字を追加してみましたが、うまくいきました。このような:

<span>Welcome <?php echo $username; ?>&#x202c;.</span>

ただし、ユーザー名に複数の RLO 文字が含まれていると、再び壊れます。したがって、RLOの文字をPDFの文字と一致させる必要がありますが、これを行う方法がわかりません。そして、W3C 仕様によると、これに対する解決策はありません。ここで何か不足していますか?

4

4 に答える 4

2

HTML5 タグ に興味があるかもしれません<bdi>

詳細:http ://rishida.net/blog/?p=564

于 2011-08-27T10:35:55.553 に答える
1

$ usernameでこの文字を検索し、見つかった場合はに変更<span>してみませんか<span dir="rtl">。また、$usernameのこれらの文字を空白に置き換えます

于 2011-08-27T10:44:48.390 に答える
0

Understanding Bidirectional (BIDI) Text in Unicode

This article being a very interesting general read about bidi issues also has a section named "Filtering User Input" near the end that seems to be talking exactly about the issue you're talking about.

于 2011-08-27T11:12:06.093 に答える
0

W3C の解決策は、「<a href="http://www.w3.org/TR/unicode-xml/" rel="nofollow noreferrer">不適切」として知られるグループから RLO やその他の文字を除外することです。マークアップで使用します。」

これは、ASCII 0x00–0x1F (潜在的に改行文字を含むか含まない) や 0x7F-0x9F などの他の不要な制御コードを除外すると同時に行います。背景については、この質問を参照してください。

( も使用する必要がありますecho htmlspecialchars($username);。ユーザー名に<orを含めることはできないかもしれません&が、出力段階でこれに依存するのは得策ではありません。htmlspecialchars当然のことながら、ページに送信されるすべてのものを呼び出すことに慣れてください。ショートカットを定義してください。必要に応じて機能します。)

于 2011-08-28T11:11:36.020 に答える