2016-10-19 5 views
0

非常に単純なWYSIWYG(太字/下線/箇条書きの点)でテキスト形式を使用できる形式のtext_areaフィールドがあります。これは、ユーザーの記述プロファイルに一貫した書式設定を行うことを目的としていました。text_areaフィールドフォームにコピー/ペーストを許可しますが、書式設定を削除します

<%= l.text_area :access, value: "#{t('.access_placeholder_html')}" %> 

しかし、一部のユーザーは通常、自分のウェブサイトから直接コピー/貼り付けによってtext_areaに書き込んでいます。そして、彼らの特定の書式設定 "ハイパーテキストリンク"、フォントサイズなどは、私のウェブサイトに反映された後、少し汚れています。

どうすればこの問題を解決できますか。理想的には、フォームを保存すると、コピー/貼り付けを許可しない代わりに許可されていないすべてのHTMLコードを取り除くことが理想的です。これは可能ですか?サニタイズを使用すべきかどうか疑問に思っていましたが、どうすればよいでしょうか? (申し訳ありませんがコードに新しい、私はあなたが理解しただろうと思います)。

答えて

0

あなたはどのバージョンのRailsを使っていないのですが、ActionView::Helpers::SanitizeHelperモジュールの#sanitizeからすべてのHTML書式を削除することができます。これは、スクラバーでテキストからHTMLをスクラブします。デフォルトのスクラバーでは、オプションで属性のホワイトリストを作成できます。出力されるものをさらに制御する必要がある場合は、独自のカスタムスクラバーを作成して文字列を変更することもできます。また、モジュールには#strip_tags#strip_linksが含まれています。これはすべてのHTMLタグとすべてのHTMLリンクタグを削除する非常に簡単なスクラバーです(リンクテキストはそのままです)。

ユーザーの入力が有効なHTMLでない場合は、不正な形式のテキストを表示することができます。ドキュメントから

クイック例:

// remove all HTML tags except <strong> <em> <a> and the 
// <href> attributes from @text 
nomarkup_text = sanitize @text, tags: %w(strong em a), attributes: %w(href) 

// remove all HTML markup 
strip_tags("<b>Bold</b> no more! <a href='more.html'>See more here</a>...") 

Bold no more! See more here...

// remove just the link markup 
strip_links('Please e-mail me at <a href="mailto:[email protected]">[email protected]</a>.') 

文字列がAPI page for SantizeHelper

+0

もう一つの文字列にPlease e-mail me at [email protected]

より詳細な情報を返し、次のことができ返しますHTMLマークアップをデータベースに格納する表示される前に表示されるようにしてください。そうすれば、将来的には、あなたが選択すれば、HTMLテキストでもっと何かをすることができます。書式を保存する前に投げ捨てると、消えてしまいます。 – Fred

+0

迅速な返信とリンクをありがとう。私はRuby 2.2.1を使用しています。投稿する前に私がすでに墨塗り文書を読んでいると言っていたはずです。したがって、オプション2を選択した場合(保存する前にフォーマットを取り除く)、どうすればいいですか? フォームフィールドを組み合わせて一緒にサニタイズする方法はありますか? – user6877257

+0

最も簡単な方法は、データベースに保存する前にtext_fieldをmodel属性に割り当てるときに、モデル内の文字列をサニタイズすることです。未完成のテキストが正しく整形されたHTMLでない場合、あなたは何をするでしょうか?)注意深く考えずに、form_fieldを実際に処理することはできません。あなたは、text_fieldがフォーカスを失ってHTMLを取り除くときにいくつかのjavascriptを実行することができますが、結果をtext_fieldに戻すと、ユーザに混乱するかもしれません。実装方法を選択する前に、何をしたいかを正確に定義する必要があります。 – Fred

関連する問題