You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:17:19