我尝试从保存在数据库中的用户文本区域输入中呈现数据。
我需要使用 nl2br 来保留换行符,
并且还想使用刀片 {{{ }}} 进行清理以防止恶意脚本。
但是 {{{ nl2br($output) }}} 不起作用, br 标签也会被清理。
请给我一些提示,谢谢。
对于 Laravel 4 用户:
{{ nl2br(e($message)) }}
e($x)
相当于 {{{ $x }}}
。
Laravel 5 用户:
{!! nl2br(e($message)) !!}
e($x)
相当于 {{ $x }}
。
Sawny 的答案是一个很好的答案,它真正很好地利用了 Blade 语法的力量,但我想更进一步。您可以使用
Blade::extend
创建您自己的 Blade @
短代码,因此我使用以下内容:
Blade::extend(function($value, $compiler)
{
$pattern = $compiler->createMatcher('nlbr');
return preg_replace($pattern, '$1<?php echo nl2br(e($2)); ?>', $value);
});
现在在你的 Blade 模板中所有要做的就是这样:
<div>@nlbr($sometext)</div>
编辑:我意识到有人遇到这个问题可能会想,“我应该把
Blade::extend
函数放在哪里?”
说实话,它可以用在很多地方(这取决于你使用 Laravel 4 还是 5 作为“最佳”方法)。
放置它的一个简单位置是在
routes.php
或 global.php
文件中,因为它们会毫不费力地被拾取。然而,这些并不是放入它们的最佳文件,你最好学习创建 Laravel Providers。
只需使用此删除 br 无需编写 这个函数nl2br 效果很好
{!!($mylogin->title) !!}