我尝试从保存在我的数据库中的用户textarea输入中呈现数据。
我需要保持换行符使用nl2br,
并且还希望通过使用刀片{{{}}}来防范恶意脚本。
但是{{{nl2br($ output)}}}不会工作,br标签也会消毒。
请给我一些提示,谢谢。
答案 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.php
或global.php
文件中,因为它们会以最少的努力获取。但是,这些文件不是最好的文件,你最好学习创建Laravel提供商。
答案 2 :(得分:-1)
只需使用此删除br无需编写 这个功能nl2br 它工作正常
{!!($mylogin->title) !!}