2014-10-20 70 views
0

IM在紅寶石1.9.3p545和Ruby的編碼問題的Rails 3.0.20顯示在郵件怪異字符

我有一個接觸的形式,我發送以下電子郵件給用戶,當他們填寫起來:

 
Thank you for your inquiry Beverly, 

This email is a receipt to confirm we have received your inquiry and `we'll` be in touch shortly. 

我的問題是它顯示we'll而不是顯示we'll,我需要做什麼來正確顯示消息?

我控制器創建行動:

def create 
    @inquiry = Inquiry.new(params[:inquiry]) 

    if @inquiry.save 
     if @inquiry.ham? 
     begin 
      InquiryMailer.notification(@inquiry, request).deliver 
     rescue 
      logger.warn "There was an error delivering an inquiry notification.\n#{$!}\n" 
     end 

     begin 
      InquiryMailer.confirmation(@inquiry, request).deliver 
     rescue 
      logger.warn "There was an error delivering an inquiry confirmation:\n#{$!}\n" 
     end 
     end 

     redirect_to thank_you_inquiries_url 
    else 
     render :action => 'new' 
    end 
    end 

我使用它煉油廠CMS

app/views/inquiry_mailer/confirmation.html.erb

我:<%= InquirySetting.confirmation_message(Globalize.locale).gsub("%name%", @inquiry.name) %>

和煉油廠設置有以下電郵:

Thank you for your inquiry %name%, 

This email is a receipt to confirm we have received your inquiry and we'll be in touch shortly. 

任何幫助將不勝感激!

+0

您可以發佈您的電子郵件模板嗎? – 2014-10-20 16:59:49

+0

更新了我的問題,你可以看看嗎? – neo 2014-10-20 17:27:17

回答

2

Rails清理字符串InquirySetting.confirmation_message(Globalize.locale).gsub("%name%", @inquiry.name)。它這樣做是爲了防止服務器可能提供的用戶提供的字符串中的html標籤等。否則你的申請將是open to XSS attacks

如果您知道confirmation_message的字符串不是用戶可更改的內容,則可以通過declaring the string as safe禁用Rails的安全機制。通過將模板的內容更改爲<%= raw InquirySetting.confirmation_message(Globalize.locale).gsub("%name%", @inquiry.name) %>來實現此目的。

再次,如果您信任模板內容的來源,請僅這樣做。