【问题标题】:Laravel Blade : HTML Tags not rendered in my blade fileLaravel Blade:我的刀片文件中未呈现 HTML 标签
【发布时间】:2020-03-11 10:17:08
【问题描述】:

所以我的表单中有一个所见即所得的字段,并且在检索数据时,html 标记没有正确呈现。 HTML 标记仍显示在表单中。我尝试了here 的一些解决方案,我也相信这是在 laravel Blade 中解析 HTML 标签的最佳方式。我也试过这样做:

{!! nl2br(e($test)) !!}

它仍然失败。显示的数据仍然是原始数据。

数据

<p><strong>Lorem</strong> ipsum dolor asdjfgjasfgbjgj gjbhgjgjgjkghkj; lkfakj ;ljljfl sdfadfasfd asera

刀片文件

@php
    $rules = $room['house_rules'];
@endphp
<div class="form-group">
    <textarea id="house_rules" name="house_rules" class="form-control" rows="4" disabled>{!! $rules !!} </textarea>
</div>

更新

DD 数据

&lt;p&gt;&lt;strong&gt;Lorem&lt;/strong&gt; ipsum dolor asdjfgjasfgbjgj gjbhgjgjgjkghkj; lkfakj ;ljljfl sdfadfasfd asera

我是否遗漏了导致 html 无法正确呈现的内容?

【问题讨论】:

  • 请出示您的完整代码:blade.php filedump(data)
  • @EemJee 您不能在文本区域内呈现 HTML,它将显示为纯文本,但 this 回答提供了一个可编辑 div 的解决方案。
  • @Remul 我想我在之前的项目中已经用它来渲染 textarea 中的数据了。
  • 你希望它如何呈现?

标签: php html laravel wysiwyg


【解决方案1】:

当您通过e() 方法运行代码时,标签将更改为html 命名代码。例如,&amp;lt; 将转换为 &amp;lt;。通过{!! !!}} 运行它不会产生任何效果,它只会渲染&amp;lt;,即&amp;lt;

我会说你最好的选择是渲染未转义的 html {!! $test !!}。但是,在这种情况下,您应该在保存到数据库之前(或在发送到刀片进行渲染之前)净化有害标签。你也许可以有一个中间件来过滤掉有害的标签。

【讨论】:

  • 谢谢,但我已经尝试过这种方法,但仍然无法正常工作。
  • 但是,这就是 html 无法正确呈现的原因。您正在将已经转义的(通过 e() 函数)代码传递给 {!! !!}。而且,它不会对字符串产生任何影响。浏览器只是呈现 html 命名代码。不是实际的标签。
  • 是的,我知道了。将数据传递给{{ $data }} 和 {!! $data !!}` 不会将 html 标签作为 html 标签读取,而是作为普通文本读取。现在,我使用了summernote,因为我也在使用它来创建所见即所得数据。
【解决方案2】:

这是因为您在 {!! !!} 刀片标签内有 {!! nl2br(e($test)) !!},它显示转义数据,这意味着 HTML 仍然存在。要转义这些 HTML 标记,请使用 {{ }}

默认情况下,Blade {{ }} 语句会自动通过 PHP 的 htmlentities 函数可以防止 XSS 攻击。如果您不希望您的数据被转义,您可以使用 {!! !!}。

你可以在官方 Laravel documentation 找到更多相关信息。

【讨论】:

  • 嗯,奇怪。也许数据错误地存储在数据库中。你能dd($rules)dd($test) 粘贴在评论中或更新你的问题吗?
  • 我已经更新了。添加了 dd($rules) 结果,我的数据仍然与上面我的数据部分中所述的相同。
  • 这是一个旧的文档参考,它的 htmlspecialchars 现在 ... e 方法使用 htmlspecialchars
  • @lagbox 我粘贴了错误的链接,但刚刚检查过,对于 6.x 版本,这部分仍然是相同的。更新了文档链接。
  • @EemJee 你可以尝试定义新变量并使用 html 模板标签在其中放入一些随机文本,然后尝试使用 {!! !!}{{ }} 标签在刀片中显示它跨度>
【解决方案3】:

您可能需要将 html_entity_decode 应用于您的数据以显示解码后的数据。

{!!html_entity_decode($item->body)!!}

【讨论】:

    猜你喜欢
    • 2019-01-09
    • 1970-01-01
    • 2018-02-06
    • 2016-08-24
    • 2018-07-31
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多