4

Rails が '<' や '&' などの文字を自動的にエスケープすることは知っていますが、これは複数のスペースが隣り合っている場合には何もしません。スペースを含め、すべてをエスケープしたいと思います。

通常は使用したくないので、&nbsp;代わりに css を使用する必要があることを理解しています。ただし、ユーザー入力を取得して表示しようとしているため、css は実行できません。

たとえば、ユーザー入力があります:     test    . ビューに表示すると<%=@user_input%>、余分な空白が 1 つのスペースとして表示されます (ただし、ソースには正しく表示されます)。

空白を簡単にエスケープする方法はありますか? h @user_inputすべてのスペースを使用してから置き換える必要がありますか?

4

1 に答える 1

8

空白は削除されません。ブラウザーは、複数の空白文字を 1 つのスペースとして単純に解釈します。

必要に応じて、各スペースを次のように変換でき&nbsp;ます。

<%= raw @user_input.gsub(/\s/, "&nbsp;") %>

または、各スペースを空の<span class="whitespace"></span>タグに置き換えてから、CSS を使用して空白の「文字」を好きなようにスタイル設定することもできます。

最後に、スタイル(下の例)を使用して、CSS のみでもこれを行うことができます。white-space: pre

編集 (コメントのフォローアップに回答するため)

<%= raw h("this      is      a    sample   &  with   ampersand.").gsub(/\s/, "&nbsp;") %>

これは、ソース内の&asをエスケープし(他の HTML エンティティについても同様に行います)、to変換を行います。&amp;" "&nbsp;

于 2012-07-28T01:23:13.237 に答える