Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 标题标记在Rails/HAML中转义两次_Ruby On Rails_Ruby On Rails 3_Escaping_Haml_Title - Fatal编程技术网

Ruby on rails 标题标记在Rails/HAML中转义两次

Ruby on rails 标题标记在Rails/HAML中转义两次,ruby-on-rails,ruby-on-rails-3,escaping,haml,title,Ruby On Rails,Ruby On Rails 3,Escaping,Haml,Title,我有一个Rails 3.2.13应用程序,其中的标题包含站点名称和特定于页面的文本。公共部分在布局中定义,页面特定部分在每个HAML视图中定义 首先,我使用了provide,如下所示: # layout.html.haml %title= (content_for?(:title) ? "#{yield(:title)} | " : "") + "Chunky-B" # show.html.haml - provide(:title, @listing.name) 我的问题是,当从模型中提取

我有一个Rails 3.2.13应用程序,其中的标题包含站点名称和特定于页面的文本。公共部分在布局中定义,页面特定部分在每个HAML视图中定义

首先,我使用了
provide
,如下所示:

# layout.html.haml
%title= (content_for?(:title) ? "#{yield(:title)} | " : "") + "Chunky-B"

# show.html.haml
- provide(:title, @listing.name)
我的问题是,当从模型中提取特定于页面的内容时,它会得到两次转义。如果
@listing.name
包含一个(未转换的)符号,我将获得输出

<title>Bacon &amp;amp; Eggs | Chunky-B</title>
Bacon&;amp;蛋|粗B
最近,我转而使用我的标题和元描述,但同样的问题仍然存在


我知道我需要一些
h
html\u-safe
或者甚至
raw
的组合。有了答案和一些尝试和错误,我可能会达到目的,但我以前不必绕过内置的转义,也不想冒着打开漏洞的风险对自己进行二次猜测。在写这个问题时,我有一种直觉,知道应该怎么做,但我敢打赌,答案会比我快

像往常一样,我一直在看答案

根据,我使用
(h@listing.name).html\u safe
得到了我想要的结果,如果我相信评论者的话,这是“常见和公认的用法”

如果我理解正确,我将强制使用
h
对名称进行转义,以保护我免受各种邪恶的侵害,然后使用
.html\u safe
调用将其标记为不需要任何额外的转义


一切看起来都很好,输出转义一次并在我的浏览器标题栏中正确呈现。不过,我需要一些保证,这是安全可靠的。如果有人能给出一个高质量的答案,解释为什么我不能从盒子里得到同样的结果,我会准备把它标记为接受。

我遇到了同样的问题,发现了一个比使用
html\u safe
更安全的解决方案

首先,更新后的代码:

# layout.html.haml
%title = full_title("Chunky-B")
其中“安全标题”为:

def完整标题(页面标题)
base_title=”“.html_安全
如果内容为?(:标题)

base_title我遇到过这个问题,它似乎只有在标题作为简单内容传递时才会发生:

content_for :title, 'Wow & Fail'
#=> Wow &amp;amp; Fail
但当它作为块传递时,它会正确渲染:

content_for :title do
  'Wow & Fail'
#=> Wow & Fail
正如你在这里看到的


只有当您通过一个块时才使用捕获方法,该块利用了主动支持的输出安全性

您被截取的代码真的能满足您的需要吗?我不确定是否有
%haml_标签谢谢--修复了答案。我试图调整课程以适应OP,但没有意识到我不能
%haml\u标记
content_for :title do
  'Wow & Fail'
#=> Wow & Fail