【问题标题】:Passing string with apostrophe to helper method doesn't display correctly将带撇号的字符串传递给辅助方法无法正确显示
【发布时间】:2012-10-24 15:30:56
【问题描述】:

我正在使用 rails 教程中的辅助方法,该方法将两个字符串连接在一起,以便在视图中的标题选择器中使用。它工作得很好,除非字符串中有撇号。

当 :group_name 包含撇号时,如下所示:

<title>The website | O&amp;#x27;Malley Brothers</title>

方法如下:app/helpers/application_helper.rb

module ApplicationHelper

  def full_title(page_title)
    base_title = "Chicago Improv Festival"
    if page_title.empty?
      base_title
    else
      "#{base_title} | #{page_title}"
    end
  end
end

这是它在布局视图中的使用方式。 app/views/layouts/application.html.erb:

<title><%= full_title(yield(:title)) %></title>

这里是在另一个视图文件中设置 :title 的地方:app/views/submissions/show.html.erb

<% provide(:title, @submission.group_name) %>

【问题讨论】:

    标签: ruby-on-rails string


    【解决方案1】:

    您需要添加.html_safe,这样撇号就不会被转义。

    "#{base_title} | #{page_title}".html_safe
    

    【讨论】:

    • 这对html注入安全吗?
    • 它似乎依赖于数据库清理程序来防止有人将“”作为他们的用户名并利用该页面。
    • @KevinM,这不是一个好的答案,因为它存在安全风险。你能接受我的回答吗?重要的是人们不要复制这个例子。
    【解决方案2】:

    打电话给.html_safewilly nilly 是个坏主意。除非您完全控制 base_titlepage_title,否则您将面临攻击,尽管我不确定哪种攻击可以利用 &lt;title&gt;&lt;/title&gt; 标签。

    我遇到了同样的问题。解决方案是不使用字符串插值,而是:

    base_title + ' | ' + page_title
    

    【讨论】:

      猜你喜欢
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多