常にjbuilderの値をescape

jbuliderを使っている時のapiの戻り値、js側でescapeするのかもしれませんが、サーバー側でやりたい時。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# config/initializers/escape_jbuilder_value
module EscapeJbuilderValue
  def method_missing(*args)
    option = args.extract_options!
    if !::Kernel.block_given? && !option[:raw]
      if args[1].is_a?(String)
        args[1] = Haml::Util.html_safe(ERB::Util.html_escape(args[1]))
      end
    end
    super(*args)
  end
end

class Jbuilder
  prepend ::EscapeJbuilderValue
end

HamlつかっているのでHamlと同じescape処理をかけていますが、ここはお好みで(ApplicationController.helpers.sanitizeとかも)。

1
json.body '<span>raw</hoge>', raw: true

とかやるとescapeされずに使えます。

Comments