2

我正在将我的应用程序从 2.3.5 迁移到 Rails 3.2.8。一种形式使用 reCAPTCHA(在 erb 文件中)。现在,recaptcha_tags 输出的所有 HTML 标签都是转义的 HTML。(即 <...> 而不是 <...>)。所以我在 HTML 页面中看到了标签本身,而不是 reCAPTCHA 框。

这是我的erb的样子。我已经验证了我将recaptcha标签放在erb中的哪个位置(在form_for内部或外部)并不重要:

注册.html.erb

...
<%= recaptcha_tags :public_key => RECAPTCHA_PUBLIC_KEY %>
...

其他的东西,比如 form_for 没有这个问题。他们输出直接的 HTML。

宝石文件

gem "recaptcha", :require => 'recaptcha/rails'

提前致谢!

4

2 回答 2

1

Rails 2.3.5 和 3.X 之间的主要变化之一是与跨站点脚本有关的一些变化。您可能希望通过升级到 2.3.14 并添加 rails_xss gem 来开始升级。rails_xss gem (https://github.com/rails/rails_xss) 会将 HTML 安全默认值切换为转义,因此它会导致您在 recaptcha_tags 中看到的问题。这将允许您查看应用程序中的哪些字符串需要标记为 html_safe。

或者,如果recaptcha_tags 是唯一的问题,您可以通过告诉rails 不要逃避recaptcha_tags 来解决它。

就像是:

<%= raw recaptcha_tags :public_key => "_________" %>
  • 感谢您进行研究。:)
于 2012-11-03T20:48:04.370 回答
1

原来我需要在 recaptcha_tags 调用前加上“raw”:

注册.html.erb

...
<%= raw recaptcha_tags :public_key => RECAPTCHA_PUBLIC_KEY %>
...
于 2012-11-04T03:42:30.077 回答