Laravel如何将HTML保存到数据库并检索出来

7

这个问题已经被问过了,但是我仍然没有得到任何正常工作的东西。

我正在尝试在我的Laravel应用程序的管理面板中创建一个功能,允许用户粘贴广告代码,然后将在Laravel应用程序的特定部分呈现。

我已经有了我的视图:

<form action="{{ route('update.ads', $ads->id) }}" method="POST" class="form-horizontal">
                {{ csrf_field() }}
        <div class="form-group">
            <label class="control-label col-sm-12" >Ad1 (Interstitial or popup on Homepage)</label>
            <div class="col-sm-10">
                <input type="text" name="ad1" id="ad1" class="form-control" value="{{ $ads->ad1 }}">
            </div>
        </div>

        <div class="form-group">
            <label class="control-label col-sm-12" >Ad2 (Video Page - Banner Desktop)</label>
            <div class="col-sm-10">
                <input type="text" name="ad2" id="ad2" class="form-control" value="{{ $ads->ad2 }}">
            </div>
        </div>

        <div class="form-group">
            <label class="control-label col-sm-12" >Ad3 (Video Page - Banner Mobile)</label>
            <div class="col-sm-10">
                <input type="text" name="ad3" id="ad3" class="form-control" value="{{ $ads->ad3 }}">
            </div>
        </div>


        <div class="form-group">
            <div class="col-sm-offset-2 col-sm-10">
                <input type="submit" class="btn btn-info" value="Update" />
            </div>

        </div>
</form>

我有一个控制器:

public function updateAds($id, Request $request){

    $this->validate($request, [
        'ad1',
        'ad2',
        'ad3'
    ]);


    $adsData = $request->only(["ad1","ad2","ad3"]);

    $adsData['ad1'] = htmlentities($adsData['ad1']);
    $adsData['ad2'] = htmlentities($adsData['ad2']);
    $adsData['ad3'] = htmlentities($adsData['ad3']);

    Ad::find($id)->update($adsData);

    Session::flash('success_msg', 'Ads updated successfully!');

    return redirect()->route('admin.ads');
}

数据已被保存,但当我尝试在网页上检索它时,无论我写什么代码,内容总是以文本形式出现,从未呈现为代码。
以下是我尝试过的输出方式:
{{ addslashes(htmlspecialchars_decode($ads->ad1)) }}

{{ htmlspecialchars_decode($ads->ad1) }}

感谢大家的帮助! 祝好, Tiago

2
请注意,在回显您应用程序的用户提供的内容时要非常小心。始终使用转义的双花括号语法来防止XSS攻击,以显示用户提供的数据。请参见此文档。请将{{}}替换为{!! !!}。 - iamab.in
你的建议让它起作用了!请发布一个答案,而不是评论,这样我就可以投票支持它!谢谢!!! - Slaveworx
4
不要忽略这个警告。因为你正在尝试回显用户提供的内容,存在着一个巨大的安全问题。如果用户将代码保存为 ``env('DB_PASSWORD'),它将在使用 {!! !!}` 显示时显示应用程序的数据库密码。或者他们可能能够执行SQL查询。 - iamab.in
我理解您的关注,但在这种情况下,唯一能访问表单以添加代码的用户是管理员。 - Slaveworx
2个回答

15
{{ }}是"安全的"刀片回声;它实际上会自动使用htmlspecialchars重新编码内容,然后输出数据。
试试{!! html_entity_decode($ads->ad1) !!}或类似的东西。我不确定它是如何存储的,所以您可能需要进行不同的解码,但关键在于使用{!! !!},它显示原始的、未转义的数据。
请参阅https://laravel.com/docs/5.6/blade#displaying-data

-2

{{ }} 是 " " 刀片的回声;它在输出数据之前自动重新编码使用htmlspecialchars。


1
这是不是一个答案,你最好在评论中发布。 - Babak Asadzadeh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接