5

私の目標は、段落で「b1234」のようなものを見つけて、次のように置き換えることです。

<a href=http://bugtracker.com/bug/1234>b1234</a>

プレーンルビーを使用してこれを作成しました:

"I fixed b1234 today".gsub(/(b([0-9]+))/i, '<a href=http://bugtracker.com/bug/\2>\1</a>')

以下を出力します。

=> "I fixed <a href=http://bugtracker.com/bug/1234>b1234</a> today" 

私のレールビューには次のものがあります。

<%= post.content %>

注: 投稿の作成時に HTML リンク コードを DB に保存しません。

私が行った場合:

<%= post.content.gsub(...) %>

出力ファイルでエスケープされた html を取得します。

&lt;a href= ... instead of <a href= ...

...そして、私はその動作が欲しいのですが、ユーザーが HTML を投稿したくありません (iframe は怖いでしょう!)。

しかし、セキュリティを犠牲にすることなく、必要な検索および置換機能を取得するにはどうすればよいでしょうか? 多分Javascriptのアプローチですか?

ありがとう!

4

1 に答える 1

4

等号を 2 倍にします。<%== post.content.gsub(...) %>. ユーザーがこのコンテンツに HTML を書き込んでいる可能性もある場合は、指定された HTML タグのみが許可されるように、サニタイズする必要があります。

編集 | 実際、置換する検索文字列に HTML 特殊文字が含まれていない場合は、文字列をエスケープしてから gsub を実行できます

<%== h(post.content).gsub(...) %>
于 2012-06-03T03:06:38.540 に答える