我尝试从我的数据库中保存的用户textarea输入中呈现数据.
我需要保持换行使用nl2br,
并且还希望通过使用刀片{{{}}}来防范恶意脚本.
但是{{{nl2br($ output)}}}不会工作,br标签也会被消毒.
请给我一些提示,谢谢.
Saw*_*wny 25
对于Laravel 4用户:
{{ nl2br(e($message)) }}
Run Code Online (Sandbox Code Playgroud)
e($x)相当于{{{ $x }}}.
Laravel 5用户:
{!! nl2br(e($message)) !!}
Run Code Online (Sandbox Code Playgroud)
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);
});
Run Code Online (Sandbox Code Playgroud)
现在,在您的Blade模板中,所有必须做的事情都是这样的:
<div>@nlbr($sometext)</div>
Run Code Online (Sandbox Code Playgroud)
编辑:我意识到有人遇到这个可能很好奇,"我在哪里放这个Blade::extend功能?"
说实话,它可以进入很多地方(这取决于你是否使用Laravel 4或5作为'最佳'方法).
一个简单的地方,把它在routes.php或global.php文件,因为它们将得到回升用最少的努力.然而,这些并不是最好的文件,你最好学习创建Laravel提供商.
| 归档时间: |
|
| 查看次数: |
8254 次 |
| 最近记录: |