ken*_*nx9 4 ruby erb sinatra erubis
在西纳特拉,使用erubis,默认设置escape_html是true。
但是有时我想取消转义,因为,我不想添加太多的escape_html。不要重复自己。:)
helpers:
def raw(string)
CGI::unescape_html(string)
end
Run Code Online (Sandbox Code Playgroud)
views:
<div class="body">
<%= raw "<h1>Thanks for help...</h1>" %>
</div>
Run Code Online (Sandbox Code Playgroud)
不起作用。
只是添加一些技巧。Erubis具有逃避(消毒)表达的能力。Erubis :: Eruby类的作用如下:
<%= expr %> - not escaped.
<%== expr %> - escaped.
<%=== expr %> - out to $stderr.
<%==== expr %> - ignored.
Run Code Online (Sandbox Code Playgroud)
不确定您使用的是哪个版本的 Erubis,但似乎它针对特定情况有一种特殊的标签:带有两个等号。因此,您的示例中的行可能如下所示:
<%== "<h1>Thanks for help...</h1>" %>
Run Code Online (Sandbox Code Playgroud)
调用 toCGI::unescape应该不是必要的,因为字符串最初并未转义。您所需要做的就是防止逃逸,而不是撤消它。
但是,如果您的 Erubis 不理解<%==,或者如果您使用 ERB,而不是 Erubis,那么抱歉,除了您所说的之外,我不知道任何其他解决方案:禁用整个文件的 html 转义并在h您确实需要转义的任何地方使用。
仅供参考,在 Rails 中也有特殊的帮助程序raw和String#html_safe,但正如我所见,它们是 ActiveSupport 的一部分,在 Sinatra 中不可用。