比方说我有:
@string = "it is a <a href="#">string</a>"
Run Code Online (Sandbox Code Playgroud)
我想以两种方式在我的应用程序的不同部分使用它:
第一个可以使用html_safe
:
@string.html_safe
Run Code Online (Sandbox Code Playgroud)
这是一个字符串
我怎样才能实现第二个?
这是一个字符串.
我在我的rails应用程序中在引导程序弹出窗口中呈现部分问题.
partial总是呈现为纯文本(显示所有HTML标记等).
这是index.html.erb中的代码
<span class="has-popover"
style="cursor:pointer;"
data-toggle="popover"
data-trigger="hover"
data-container="body"
data-placement="right"
title="Lorem Ipsum"
data-content= "<%= render :partial => 'envs/e1' %>" >
<i class="fa fa-question-circle " aria-hidden="true"></i>
</span>
Run Code Online (Sandbox Code Playgroud)
在app.js
我有这个片段
$(".has-popover").popover({
html : true
});
Run Code Online (Sandbox Code Playgroud)
这是文件夹中的_e1.html.erb
部分内容envs
<h2>Mauris euismod sollicitudin?</h2>
<p>Morbi sit amet tellus pellentesque, maximus eros a, aliquam nunc. Vivamus velit velit, vestibulum at eros eu, iaculis hendrerit tortor. Morbi ullamcorper purus at ornare ullamcorper. </p>
<br>
<p>Morbi sit amet tellus pellentesque, maximus eros a, aliquam nunc. Vivamus …
Run Code Online (Sandbox Code Playgroud) 我的视图中有两段代码:
<%= sanitize('<h3>winter</h3>') %>
<%= '<h3>winter</h3>'.html_safe %>
Run Code Online (Sandbox Code Playgroud)
它们似乎都导致在提供的字符串中编码html标签.它们之间有什么区别,我应该何时使用?
我遇到了rails自动转义的问题.它目前认为字符串是html_safe(它是),但出于显示目的,我需要它仍然逃避html.这是字符串采取的步骤.
my_string = render(:partial => "set_string", :locals => {:item => @item})
<%= my_string %>
Run Code Online (Sandbox Code Playgroud)
部分是基本的
<h2>Page Header</h2>
<strong><%= item.name %></strong>
<%= item.body %>
etc
Run Code Online (Sandbox Code Playgroud)
我的理解是因为我在视图中直接显示文本(h2等),它假设它是安全的,并且它也正确地逃避了项目输出,这使整个my_string安全.所以,当我尝试用它显示它时
<%= my_string %>
Run Code Online (Sandbox Code Playgroud)
它没有逃避剩余的HTML.我尝试添加h来强制转义,但这不起作用.
所以我的问题是,无论如何强制html转义安全字符串,而不是在字符串上调用会使其不安全的东西?
非常感谢你的帮助.
在@post.content
,我想要
1.simple_format,所以内容将有不同的行,而不是没有中断的单行
2.html_safe,因此用户可以粘贴一些<embed>
视频链接,如youtubes
可以单独使用<%= simple_format @post.content %>
和<%= @post.content.html_safe %>
单独使用
但是当我一起使用它们时:<%= simple_format @post.content.html_safe %>
html_safe不起作用,因此<embed>
视频不会显示
你能告诉我如何同时启用<embed>
代码simple_format
吗?还是有其他解决方案来显示@post.content
?谢谢!!!
我正在使用自动表单标签帮助程序来创建我的表单标签并通过i18n支持将它们翻译,但是,我想在标签中包含HTML,而我无法弄清楚如何使HTML安全.
例如:
en:
helpers:
label:
product:
name: 'Your Product Name <small>Try to be creative</small>'
Run Code Online (Sandbox Code Playgroud)
结束为:
<label for="product_name">Your Product Name <Try to be creative></label>
Run Code Online (Sandbox Code Playgroud)
但我希望它是:
<label for="product_name">Your Product Name <small>Try to be creative</small></label>
Run Code Online (Sandbox Code Playgroud)
有没有办法让我将翻译指定为html_safe,以便在输出之前不进行编码?
此外,这似乎是HTML设置的最具语义的方式,但如果我完全以错误的方式接近这一点,我愿意接受建议.
谢谢 :)
更新:
<%= form_for @product do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<% end %>
Run Code Online (Sandbox Code Playgroud) 感觉就像html_safe
在String类中添加一个抽象,需要了解正在发生的事情,例如,
<%= '1 <b>2</b>' %> # gives 1 <b>2</b> in the HTML source code
<%= h '1 <b>2</b>' %> # exactly the same as above
<%= '1 <b>2</b>'.html_safe %> # 1 <b>2</b> in HTML source code
<%= h '1 <b>2</b>'.html_safe %> # exactly the same as above
<%= h (h '1 <b>2</b>') %> # 1 <b>2</b> wont' escape twice
Run Code Online (Sandbox Code Playgroud)
对于第4行,如果我们说,好的,我们相信字符串 - 它是安全的,但为什么我们不能逃脱呢?似乎要逃避它h
,字符串必须是不安全的.
所以在第1行,如果字符串没有被转义h
,它将自动转义.在第5行,h
无法将字符串两次转义 - 换句话说,在<
更改为之后<
,它再也无法逃脱它&lt;
.
那么发生了什么?起初,我认为 …
我无法在视图中转义原始html标记
<% array = @article.tags.collect { |p| (link_to p.name, '#') } %>
<%= array.join(' , ') %>
Run Code Online (Sandbox Code Playgroud)
Raw和html_safe
<% array = @article.tags.collect { |p| raw (link_to p.name, '#') } %>
<% array = @article.tags.collect { |p| (link_to p.name, '#').html_safe } %>
Run Code Online (Sandbox Code Playgroud)
给我这个输出,而不转义html标签
<a href="#">tag1</a> , <a href="#">tag2</a> , <a href="#">tag4</a>
Run Code Online (Sandbox Code Playgroud) 我使用rails 3.有没有简单的方法告诉I18n尊重插值中使用的字符串'html safness'并默认使所有翻译的字符串html安全?所以,如果我有这个en.yml
:
en:
user_with_name: 'User with name <em>%{name}</em>'
Run Code Online (Sandbox Code Playgroud)
我使用t('user_with_name', :name => @user.name)
,我得到用户名html转义,但<em>
并</em>
保持原样?
我有一个textarea字段,用户可以在其中输入内容.当在页面上显示它们的条目时,rails会返回\n
每个换行符,这对于页面上的html来说根本没有中断.
从我所收集,解决这个得到的标准方法是一个.gsub
命令,替换\n
用<br />
,然后.html_safe
就结束,以确保<br />
呈现.
问题是,我不想html_safe内容 - 仍然应该替换html,但<br />
标签应该注入(非转义)内容.
建议表示赞赏.
html-safe ×10
escaping ×2
automation ×1
difference ×1
html ×1
html-escape ×1
javascript ×1
sanitize ×1
xss ×1