Ruby on rails Rails在我的纯文本邮件中转义HTML
我正在使用rails 3.2.5Ruby on rails Rails在我的纯文本邮件中转义HTML,ruby-on-rails,ruby,ruby-on-rails-3,actionmailer,erb,Ruby On Rails,Ruby,Ruby On Rails 3,Actionmailer,Erb,我正在使用rails 3.2.5ActionMailer发送纯文本邮件。如果我有这样的邮件视图: 来自用户.text.erb的消息: 你好, 您从中收到以下消息: 当@message为“引号和符号”时,纯文本邮件包含“引号和符号”。因此,rails似乎只是将其视为HTML视图,并转义任何HTML以防止跨站点脚本编写。然而,这是一封纯文本邮件。扩展名是.text.erb和ActionMailer检测到这一点,并将MIME设置为text/plain。所以我永远不想逃避其中的任何html 我的应用程
ActionMailer
发送纯文本邮件。如果我有这样的邮件视图:
来自用户.text.erb的消息
:
你好,
您从中收到以下消息:
当@message
为“引号和符号”
时,纯文本邮件包含“引号和符号”
。因此,rails似乎只是将其视为HTML视图,并转义任何HTML以防止跨站点脚本编写。然而,这是一封纯文本邮件。扩展名是.text.erb
和ActionMailer
检测到这一点,并将MIME设置为text/plain
。所以我永远不想逃避其中的任何html
我的应用程序中有很多邮件模板,它们都是纯文本。我会考虑修补它们,包括<代码> <代码>或<代码> <代码>坏样式-不是非常干。< /P>
我尝试了各种各样的解决办法,其中包括资金修补Erubis。它们似乎都不起作用。我正在寻找一些补丁或配置选项或任何东西来禁用所有.text.erb
文件的转义html
非常感谢您的帮助 试试看
<%= @message.html_safe %>
如果您使用了搜索功能,就会找到这个答案。如果这不符合你的需要,也许可以检查一下
如果您还没有看到,这里讨论了一些选项在通过Erubis代码调试了几个小时后,我发现了以下修复方法。您只需将其放入
config/initializers/fix_my_mails.rb
。我已经用rails 3.2.7对此进行了测试。它可能适用于其他版本
module ActionView
class Template
module Handlers
class ERB
def call(template)
if template.source.encoding_aware?
# First, convert to BINARY, so in case the encoding is
# wrong, we can still find an encoding tag
# (<%# encoding %>) inside the String using a regular
# expression
template_source = template.source.dup.force_encoding("BINARY")
erb = template_source.gsub(ENCODING_TAG, '')
encoding = $2
erb.force_encoding valid_encoding(template.source.dup, encoding)
# Always make sure we return a String in the default_internal
erb.encode!
else
erb = template.source.dup
end
self.class.erb_implementation.new(
erb,
:trim => (self.class.erb_trim_mode == "-"),
:escape => template.identifier =~ /\.text/ # only escape HTML templates
).src
end
end
end
end
end
模块操作视图
类模板
模块处理程序
雇员再培训局
def调用(模板)
如果template.source.encoding不知道?
#首先,将其转换为二进制,以便
#错了,我们仍然可以找到编码标签
#()使用常规
#表情
template\u source=template.source.dup.force\u编码(“二进制”)
erb=模板\源.gsub(编码\标记“”)
编码=$2
erb.force_编码有效_编码(template.source.dup,encoding)
#始终确保在默认的\u internal中返回字符串
erb.encode!
其他的
erb=template.source.dup
结束
self.class.erb_implementation.new(
雇员再培训局,
:trim=>(self.class.erb\u trim\u mode==“-”,
:escape=>template.identifier=~/\.text/#仅转义HTML模板
).src
结束
结束
结束
结束
结束
它只是在文件名中包含
.text
的每个erb文件中禁用HTML实体 谢谢你的回答,但如问题中所述,这不是我的选择。“…………我会考虑把所有的字体都贴在不好的字体上,而不是很干。”抱歉,吃东西和看书的效果似乎不像我想象的那么好。我添加了一个附加的likn,其中对这个问题进行了更深入的讨论。如果你还没读过,也许会有帮助
module ActionView
class Template
module Handlers
class ERB
def call(template)
if template.source.encoding_aware?
# First, convert to BINARY, so in case the encoding is
# wrong, we can still find an encoding tag
# (<%# encoding %>) inside the String using a regular
# expression
template_source = template.source.dup.force_encoding("BINARY")
erb = template_source.gsub(ENCODING_TAG, '')
encoding = $2
erb.force_encoding valid_encoding(template.source.dup, encoding)
# Always make sure we return a String in the default_internal
erb.encode!
else
erb = template.source.dup
end
self.class.erb_implementation.new(
erb,
:trim => (self.class.erb_trim_mode == "-"),
:escape => template.identifier =~ /\.text/ # only escape HTML templates
).src
end
end
end
end
end