7

stackoverflow で見つけた問題に似た問題がありますが、まったく同じではありません。次の質問の解決策は避けたいです。

https://stackoverflow.com/a/10407782/996587

基本的に、次の HTML 出力が必要です。

<div class='myclass' extraattr='UNESCAPED <>& CONTENT'>
    Content...
</div>

私が使用している HAML は次のようになります。

.myclass{ "extraattr" => "UNESCAPED <>& CONTENT" }
  Content...

コンテンツを希望どおりに出力する方法がよくわかりません。文字列の末尾に .html_safe を適用しようとしましたが、次のエラーが発生しました:

"UNESCAPED <>& CONTENT" の未定義メソッド `html_safe':String

後で、この特定のアプリケーションでは Rails を使用せず、ruby + HAML だけを使用していることに気付きました。(私はこのプロジェクトを継承し、とにかく HAML、Ruby、および Rails を学び始めたところです)

繰り返しになりますが、リンクをクリックするのが面倒で、私が言及した解決策を読んでいない人のために、ファイル全体の属性をエスケープしないように HAML を構成しないことをお勧めします。この 1 つの属性だけです。

ありがとう!

アップデート

:plain フィルターを見つけたところ、それを使用して必要なものを取得できました。ただし、HTML をすべて書かなくても済むように、私が知らないトリックがあれば、教えていただければ幸いです。私の「修正」:

:plain
  <div class='myclass' extraattr='UNESCAPED <>& CONTENT'>
    Content...
  </div>
4

2 に答える 2

6

Rails 以外で Haml の個々の属性のエスケープをオフにする方法は (現在) ありません:escape_attrs:once必要なものによっては、オプションを検討する価値があるかもしれません。

Rails で Haml を使用すると、HTML エスケープ メソッドが、html_safeActiveSupport が追加する値を尊重するメソッドに置き換えられます (「参考文献」を参照lib/haml/helpers/xss_mods.rb)。

必要に応じて、これらのメソッドを Rails の外部で使用することもできます。html_safeこれを機能させるには、 String クラスにとメソッドを追加する必要がありますhtml_safe?(ここで注意してください。この例は、Rails が提供する完全な XSS 保護の「貧弱な」バージョンにすぎません。実際には多くのことから保護することはできません。ただし、属性の選択的なエスケープが可能になります)。

Haml を要求した後、以下をどこかに追加します (必要になる独自のファイルに入れるのが最適な場合があります)。

class String
  def html_safe?
    defined?(@html_safe) && @html_safe
  end

  def html_safe
    @html_safe = true
    self
  end
end

require 'haml/helpers/xss_mods'

module Haml::Helpers
  include Haml::Helpers::XssMods
end

文字列で使用できるようhtml_safeになりましたが、Haml はそれらをエスケープしません。

.myclass{ "extraattr" => "UNESCAPED <>& CONTENT".html_safe,
          "otherextraattr" => "ESCAPED <>& CONTENT"}
  Content...

出力:

<div class='myclass' extraattr='UNESCAPED <>& CONTENT' otherextraattr='ESCAPED &lt;&gt;&amp; CONTENT'>
  Content...
</div>
于 2013-05-17T20:04:25.847 に答える
0

a を使用し\て文字をエスケープしようとしましたか。

{ :myattr => '\<\>\&' }

于 2013-05-16T22:45:22.713 に答える