如何在用户输入时保持换行符,同时在刀片中进行清理?

问题描述 投票:0回答:3

我尝试从保存在数据库中的用户文本区域输入中呈现数据。

我需要使用 nl2br 来保留换行符,

并且还想使用刀片 {{{ }}} 进行清理以防止恶意脚本。

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

请给我一些提示,谢谢。

php laravel-4 laravel-blade
3个回答
26
投票

对于 Laravel 4 用户:

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

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

Laravel 5 用户:

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

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


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.php
global.php
文件中,因为它们会毫不费力地被拾取。然而,这些并不是放入它们的最佳文件,你最好学习创建 Laravel Providers。


-1
投票

只需使用此删除 br 无需编写 这个函数nl2br 效果很好

{!!($mylogin->title) !!}
© www.soinside.com 2019 - 2024. All rights reserved.