我有一个 Rails 3.2.13 应用程序,其中的标题包含站点名称和页面特定文本。公共(public)部分在布局中定义,在每个 HAML View 中定义页面特定部分。
首先我使用了provide
像这样:
# layout.html.haml
%title= (content_for?(:title) ? "#{yield(:title)} | " : "") + "Chunky-B"
# show.html.haml
- provide(:title, @listing.name)
我的问题是,当从模型中提取页面特定内容时,它会得到 两次逃跑 .如果
@listing.name
包含一个(未转义的)&符号我得到输出<title>Bacon &amp; Eggs | Chunky-B</title>
我最近改用 the
meta-tags
gem对于我的标题和元描述,但同样的问题仍然存在。我知道我需要一些
h
的组合, html_safe
甚至可能raw
.回答 this question和一些尝试和错误我可能会到达那里,但我以前不必绕过内置的转义,并且不想冒着打开漏洞的风险事后猜测自己。在写这个问题时,我有一种预感,但我敢打赌,热切的回答者会打败我。 :)
最佳答案
像往常一样,我一直在看答案。
我通过使用 (h @listing.name).html_safe
得到了我想要的结果根据 this comment ,如果我相信评论者,它是“常见且可接受的使用”。
如果我理解正确,我会强制使用 h
转义名称保护我免受各种邪恶,然后用 .html_safe
将其标记为不需要任何额外的转义称呼。
一切看起来都很好,输出被转义一次并在我的浏览器标题栏中正确呈现。不过,我可以放心,这是安全可靠的。如果有人能给出一个高质量的答案,说明为什么我没有开箱即用地得到相同的结果,我会准备好将其标记为已接受。
关于ruby-on-rails - 标题标签在 Rails/HAML 中被转义两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18080517/