如何保持用户输入的换行符,还要清除刀片中的消毒?

时间:2014-10-31 03:28:44

标签: laravel-4

我尝试从保存在我的数据库中的用户textarea输入中呈现数据。

我需要保持换行符使用nl2br,

并且还希望通过使用刀片{{{}}}来防范恶意脚本。

但是{{{nl2br($ output)}}}不会工作,br标签也会消毒。

请给我一些提示,谢谢。

3 个答案:

答案 0 :(得分:25)

对于 Laravel 4 用户:

{{ nl2br(e($message)) }}

e($x)相当于{{{ $x }}}

Laravel 5 用户:

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

e($x)相当于{{ $x }}

答案 1 :(得分:7)

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.phpglobal.php文件中,因为它们会以最少的努力获取。但是,这些文件不是最好的文件,你最好学习创建Laravel提供商。

答案 2 :(得分:-1)

只需使用此删除br无需编写 这个功能nl2br 它工作正常

{!!($mylogin->title) !!}