Laravel 4 如何保持用户输入的换行符,同时在blade中进行消毒?

Laravel 4 如何保持用户输入的换行符,同时在blade中进行消毒?,laravel-4,Laravel 4,我尝试从保存在数据库中的用户textarea输入中呈现数据 我需要使用nl2br保持换行符 并且还想通过使用blade{{}}来防止恶意脚本 但是{{{nl2br($output)}}}}不起作用,br标记也会被清理 请给我一些提示,谢谢。对于Laravel 4用户: {{ nl2br(e($message)) }} {!! nl2br(e($message)) !!} e($x)相当于{{{{$x}}} Laravel 5用户: {{ nl2br(e($message)) }} {!!

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

我需要使用nl2br保持换行符

并且还想通过使用blade{{}}来防止恶意脚本

但是{{{nl2br($output)}}}}不起作用,br标记也会被清理


请给我一些提示,谢谢。

对于Laravel 4用户:

{{ nl2br(e($message)) }}
{!! nl2br(e($message)) !!}
e($x)
相当于
{{{{$x}}}

Laravel 5用户:

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

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

Sawny的答案是一个非常好的答案,它确实很好地利用了Blade语法的强大功能,不过我会更进一步。您可以使用
Blade::extend
创建自己的刀片
@
短代码,因此我使用以下代码:

Blade::extend(function($value, $compiler)
{
    $pattern = $compiler->createMatcher('nlbr');
    return preg_replace($pattern, '$1<?php echo nl2br(e($2)); ?>', $value);
});
Blade::extend(函数($value,$compiler)
{
$pattern=$compiler->createMatcher('nlbr');
返回preg_replace($pattern,$1',$value);
});
现在,在刀片模板中,您需要做的事情如下:

<div>@nlbr($sometext)</div>
@nlbr($sometext)
编辑:我意识到有人遇到这个问题时可能会想,“我应该把
Blade::extend
函数放在哪里?”

老实说,它可以在很多地方使用(这取决于您是否使用Laravel4或5作为“最佳”方法)


放在
routes.php
global.php
文件中是一个简单的地方,因为它们只需花费最少的精力就可以找到。但是,这些文件不是最好的文件,您最好学习创建Laravel提供程序。

只需使用此删除br无需编写 此函数为nl2br 它很好用

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

我不得不这样使用它{!!nl2br(e($message))