【问题标题】:Escaping a string with Blade, rendering HTML用 Blade 转义字符串,渲染 HTML
【发布时间】:2015-06-27 01:01:11
【问题描述】:

我有一个 $text 变量,其中包含一些文本和 HTML 代码。我想渲染它的 HTML,但仍然要确保字符串的其余部分被转义。

$text = 'Example text with image <img src"image_1.jpg">. More text...'

// This will render the HTML but will NOT escape the string
{!! $text !!}

// This will escape and display the variable as raw string, with no HTML rendering
{{ $text }}

在 Laravel 5 中,有没有办法在允许 HTML 的同时使用 Blade 转义字符串?

【问题讨论】:

  • “转义”是什么意思?
  • 我的意思是通常通过 Blade 中的双花括号实现的 XSS 保护 - {{...}}。似乎我只能同时拥有两个中的一个:没有 HTML 渲染的转义字符串或没有转义的渲染......
  • 应用程序应该如何决定是否必须转义 HTML 标签?转义的真正目的是不呈现 HTML。
  • @lukasgeiter 我明白了。只是想知道 Blade 中是否有办法指定这种行为 - 例如通过指定允许的字符等。所以我能做到这一点的唯一方法是使用原生 PHP?我还记得 Blade 在后台使用了一个 e() 函数。有用吗?
  • @lukasgeiter 你不太对。转义的 HTML 中可以有允许的标签,如div、p、b、td 等。

标签: php laravel laravel-5 blade


【解决方案1】:

我不知道刀片中有这样的功能。您不能只允许特定的 HTML 标记,因为它们可能包含不需要的内容(如 onload)。字符串的处理可能很棘手。您是否考虑过标记语言?

【讨论】:

  • 没错! +1 提及onload
  • 我同意这一点。使用具有一组特定允许元素的元语言,例如 markdown if 您显示用户生成的内容。如果不是(如您的示例中),则将其显示为未转义。
【解决方案2】:

在这种情况下,您需要对字符串进行一些手动处理。

净化器https://github.com/mewebstudio/Purifier 可能会满足您的需求。它将使字符串无害,然后在其中打印 html 是安全的。

否则,如果找不到类似的东西,您需要编写自己的解析器。

【讨论】:

    猜你喜欢
    • 2020-03-14
    • 1970-01-01
    • 2023-03-13
    • 2014-08-29
    • 2021-01-30
    • 2015-08-13
    • 2017-08-04
    • 2011-07-26
    • 2016-11-13
    相关资源
    最近更新 更多