0

質問があります。

ユーザーがそこに何でも入力できるボディ列があるコメントモデルがあります。
明らかに、ユーザーは他の Web サイトへの URL リンクを入力する可能性があります。
私の推測では、保存時に< a href >タグに置き換える必要があると思います。
この種のことを処理するための良いgemまたは何かはありますか?

4

2 に答える 2

4

本格的なマークダウン パーサー ( Redcarpet )を使用したくない場合は、 Rinkuを使用してください。超高速で安全です。セキュリティ リスクにさらされる可能性が高いため、正規表現ベースのソリューションは使用しないでください。

text = "Hello! Check this out: https://github.com/vmg/rinku"
Rinku.auto_link(text, mode=:all, link_attr=nil, skip_tags=nil)

プロデュース:

=> "Hello! Check this out: <a href=\"https://github.com/vmg/rinku\">https://github.com/vmg/rinku</a>"
于 2012-12-29T21:53:29.287 に答える
1

後世のために保存しますが、これは問題を解決するための安全な方法ではないことに注意することが重要だと思います. セキュリティに関するすべての影響を自分で理解したい場合を除き、このアドバイスに従わないでください。Jiří Pospíšil の答えの方が優れています。=D

そのために宝石は本当に必要ありません (私は個人的に、非常に単純なことのために宝石を避けようとしています)。目的に対して合理的に信頼できる正規表現を作成し、次のようなものを使用します

input.gsub(regex, '<a href="\1">some text</a>')

リンクを同等のhtmlに変換します。この結果を表示するには を使用する必要があることに注意してください。rawそうしないと、レールが出力をエスケープします。これは、データベースに入るときにエスケープしない限り、ユーザーが他の任意のマークアップを入れることができることも意味します。必ずそうしてください。

または、表示するのと同じことを行うこともできますが、考慮事項や手順が少し異なります。

于 2012-12-29T21:48:59.650 に答える