最后回答。
我目前正在重构我的应用程序,我想知道如何缩短我的“ if”,因为我经常在其中使用它们:
我想要的是<br />
仅当值不为空时才换行,所以,现在我以这种方式编写它:
<% if @card.address.street.present? %>
<%= @card.address.street.titleize %>
<%= tag(:br) %> ## or plain html <br />
<% end %>
它运作良好,但我敢肯定,这种方法比较简单。
我试过了 :
<%= @card.address.street.titleize + tag(:br) if @card.address.street.present? %>
==>华盛顿路''## br标签不是html_safed。
如果我做 :
<%= raw @card.address.street.titleize + tag(:br) if @card.address.street.present? %>
等于:
<%== @card.address.street.titleize + tag(:br) if @card.address.street.present? %>
我工作良好,但是将代码暴露给XSS攻击。
因此,我尝试了:
<%= @card.address.street.titleize + raw(tag(:br)) if @card.address.street.present? %>
<%= @card.address.street.titleize + tag(:br).html_safe if @card.address.street.present? %>
<%= @card.address.street.titleize + "<br />".html_safe if @card.address.street.present? %>
==>华盛顿路''## br标签仍然不是html_safed。
对此进行消毒可得到很好的效果,像这样使用:
<%= sanitize(@card.address.street.titleize + tag(:br)) if @card.address.street.present? %>
但是,这是关于性能的最佳方式吗?
我最终使用了一个助手:
内部助手/ application_helper
def line_break value
sanitize(value) + tag(:br)
end
帮助程序已加载到控制器内部
class UsersController < ApplicationController
helper ApplicationHelper
我在应用程序一中添加了此帮助程序。如果您希望应用程序的通用性较差,则首选模块。
与空参数一起使用的Sanitize将检查字符串中的html,并将其删除。如果您想要一些较轻的东西,则可以使用h()
它来转义所有html而不是将其删除。
在视图中
<%= line_break(@card.address.street.titleize) if @card.address.street.present? %>
我知道这纯粹是“写入速度问题”,但是任何帮助都将不胜感激。
亲切的问候
这不是因为您的br标签是安全的还是不安全的。
街道字符串是不安全的,并且当您将安全字符串添加到不安全字符串时,结果仍然是不安全的。
您可以改为这样写
<%= h(@card.address.street.titleize) + tag(:br) %>
h进行转义并将结果标记为安全(因为它刚刚被转义)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句