content_tag与html_safe未按预期工作的技术求助
正确实现带HTML格式的style1段落显示
嘿,你尝试的几种写法其实方向都对,只要调整小细节就能达到你想要的效果——把带HTML标签的内容放到class="style1"的<p>里,同时保留原有的HTML格式。
我给你梳理两种靠谱的实现方式,还有要注意的坑:
直接写HTML标签的方式(最直观)
这种写法简单直接,只要确保你的question内容经过安全处理后,用html_safe告诉Rails不要转义里面的HTML标签就行:<p class="style1"><%= question.html_safe %></p>👉 注意:别在
<%= %>前后加多余的空格或者换行,不然渲染出来的<p>里会多出不必要的空白字符,影响排版。用Rails content_tag的方式(更符合Rails风格)
如果习惯用Rails的标签生成方法,content_tag有两种写法都能实现需求:
第一种是直接把内容作为参数传入:<%= content_tag :p, question.html_safe, class: 'style1' %>第二种是用块写法(适合内容需要拼接多个元素的复杂场景):
<%= content_tag :p, class: 'style1' do %> <%= question.html_safe %> <% end %>👉 同样要注意块内的空白,尽量不要在
<%= %>外面加多余的空格,避免渲染出无效空白。
重要安全提醒
如果question的内容是来自用户输入(比如表单提交的内容),绝对不能直接用html_safe!一定要先做 sanitize 处理,过滤掉危险的HTML标签(比如<script>),防止XSS攻击。可以用Rails内置的sanitize方法:
<p class="style1"><%= sanitize(question).html_safe %></p>
或者用raw方法(和html_safe效果一致,但语义上更明确表示要输出原始内容):
<p class="style1"><%= raw(question) %></p>
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

