我正在从2.3.5将我的应用程序迁移到Rails 3.2.8。一种形式使用reCAPTCHA(在erb文件中)。现在,recaptcha_tags发布的所有HTML标记都是转义HTML。 (即& lt; ...& gt;而不是< ...>)。所以我在HTML页面中看到了标签,而不是reCAPTCHA框。
这是我的erb看起来像。我已经验证了在erb中我把recaptcha标签放在哪里(在form_for内部或外部)并不重要:
register.html.erb
...
<%= recaptcha_tags :public_key => RECAPTCHA_PUBLIC_KEY %>
...
其他事情,比如form_for没有这个问题。它们直接输出HTML。
的Gemfile
gem "recaptcha", :require => 'recaptcha/rails'
提前致谢!
答案 0 :(得分:1)
Rails 2.3.5和3.X之间的一个主要变化是与跨站点脚本有关的一些变化。您可能希望通过升级到2.3.14并添加rails_xss gem来开始升级。 rails_xss gem(https://github.com/rails/rails_xss)会将HTML安全默认值切换为escape,因此会导致您使用recaptcha_tags查看的问题。这将允许您查看应用中需要将哪些字符串标记为html_safe。
或者,如果recaptcha_tags是唯一的问题,你可以通过告诉rails不要逃避recaptcha_tags来修复它。
类似的东西:
<%= raw recaptcha_tags :public_key => "_________" %>
答案 1 :(得分:1)
原来我需要在recaptcha_tags调用前加上“raw”:
register.html.erb
...
<%= raw recaptcha_tags :public_key => RECAPTCHA_PUBLIC_KEY %>
...