【问题标题】:Rails: How not to escape in "<title>" tagRails:如何不在“<title>”标签中转义
【发布时间】:2016-04-22 09:31:48
【问题描述】:

我开发了 Rails 应用程序。

&amp;amp; 等字符在&lt;title&gt; 标记中转义为&amp;amp;

例如foo &amp;amp; bar在标题中显示如foo &amp;amp; bar

当我使用raw 时,它可以按我的预期显示。但我不想使用raw,因为数据将由用户输入。

我想显示为this post(请仅查看标题。内容与我的问题无关)。尽管用户输入了&amp;amp;,但标题中仍显示。

我的代码如下。

application.html.erb

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

application_helper.rb

  def full_title(page_title = '')
    base_title = "app name"
    if page_title.empty?
      base_title
    else
      page_title + " | " + base_title
    end
  end

我在一些视图文件中添加了provide,例如show.html.erb

<% provide(:title, @schedule.title) %>  #this title is inputted by user

是否可以转义,但允许某些字符不转义?

【问题讨论】:

  • 使用.html_safe方法
  • .html_safe 相当于使用 raw。切勿将其用于用户输入。
  • 我很困惑。那你想逃还是不逃?
  • 你想转义它,但允许一些字符不转义吗?
  • &amp;amp; 必须转义为&amp;amp;&lt;title&gt; 标签也不例外。如果您的浏览器字面上显示&amp;amp;,您很可能已经转义了两次。顺便说一句,链接帖子的标题标签是&lt;title&gt;symfony2 - Symfony 2, Twig: how not to escape field value (used with backbonejs &amp;amp; symfony 2) - Stack Overflow&lt;/title&gt;

标签: ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

您问如何避免转义,但听起来您真正想要的是让浏览器显示“&amp;amp;amp;”而不是“&amp;amp;amp;”。

如果您在the page you said looked right 上使用浏览器的“查看源代码”功能,您会看到它以:

<!DOCTYPE html>
<html itemscope itemtype="http://schema.org/QAPage">
<head>

<title>symfony2 - Symfony 2, Twig: how not to escape field value (used with backbonejs &amp; symfony 2) - Stack Overflow</title>

请注意,& 符被实体编码为 &amp;amp;amp;,就像它“应该”一样。

注意文档以 DOCTYPE 声明开始。以其他内容开头的文档可能会触发浏览器的quirks mode 以实现兼容性。

在 Rails 应用程序上使用浏览器的“查看源代码”功能。文档是否以 DOCTYPE 声明开头? (&lt;DOCTYPE html&gt; 很好。)序列&amp;amp;amp; 是否单独出现? (如果你看到 &amp;amp;amp; 或类似的,你正在编码一个已经编码的字符串。)

【讨论】:

  • 感谢您的评论,@RJHunter。我的 html 以 &lt;!DOCTYPE html&gt; 开头。它显示&lt;title&gt;foo &amp;amp;amp; bar&lt;/title&gt;
  • 如果您的应用程序正在发送“&amp;”到浏览器,那么您的应用程序正在转义已经转义的内容。例如,您的应用程序的输入部分可能会在将内容存储到数据库之前对其进行 HTML 转义。稍后,应用程序的显示部分从数据库中读取内容并对其进行 HTML 转义以放入 HTML。
猜你喜欢
  • 1970-01-01
  • 2014-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-30
  • 2017-12-18
  • 1970-01-01
相关资源
最近更新 更多