2013-02-03 21 views

回答

3

不確定您使用的是哪個版本的Erubis,但是它有seems like它具有特殊類型的標記用於該特定情況:使用兩個等於標誌。所以從你的榜樣行可能看起來像:調用

<%== "<h1>Thanks for help...</h1>" %> 

CGI::unescape不應該是必要的,因爲該字符串最初沒能逃脫。所有你需要的是防止轉義,而不是撤消它。

但如果你Erubis不懂<%==,或者如果您使用ERB,不Erubis,那麼對不起,我不知道除了你說的任何其他解決方案:禁用HTML逃生的整個文件,並使用h無處不在你確實需要逃避。

僅供參考,在Rails中也有特殊幫助rawString#html_safe,但正如我所看到的,他們是ActiveSupport的一部分,在Sinatra中不可用。

4

只是爲了增加一些提示。 Erubis有能力逃避(消毒)表達。 Erubis :: eRuby的類的行爲,如下所示:

<%= expr %> - not escaped. 
<%== expr %> - escaped. 
<%=== expr %> - out to $stderr. 
<%==== expr %> - ignored. 

Source

0

可以完成你想要的是這樣的:

Web.rb:

require 'sinatra' 
require 'erubis' 
set :erb, :escape_html => true 

get '/hi' do 
    @model = Hash.new() 
    @model[:person] = "<b>World</b>" 
    erb :hello 
end 

Layout.erb:

<!DOCTYPE html> 
<html> 
<head> 
    <title><%= @title %></title> 
</head> 
<body> 
    <%== yield %> 
</body> 
</html> 

Hello.erb:

<div> 
    <p>Hello, <%= @model[:person] %>!</p> 
    <p>Hello, <%== @model[:person] %>!</p> 
</div> 
相關問題