Laravel如何将HTML保存到数据库然后检索它

Posted

技术标签:

【中文标题】Laravel如何将HTML保存到数据库然后检索它【英文标题】:Laravel how to save HTML to database and then retrieve it 【发布时间】:2018-10-29 17:17:43 【问题描述】:

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

我正在尝试在我的 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) 

感谢大家的帮助! 问候, 蒂亚戈

【问题讨论】:

替换为!! !!在回显应用程序用户提供的内容时要非常小心。在显示用户提供的数据时,始终使用转义的双花括号语法来防止 XSS 攻击。 请参阅 this 你的建议使它工作!发布答案而不是评论,以便我投票!谢谢!!! 不要忽略警告。当您尝试回显用户提供的内容时,存在一个很大的安全问题。如果用户将代码保存为 ``env('DB_PASSWORD')` ,它将在使用!! !! 显示时显示您的应用程序的数据库密码。或者他们可能能够执行 sql 查询。 我理解您的担忧,但在这种情况下,唯一可以访问表单以添加代码的用户是管理员。 【参考方案1】:

是“安全”的刀片回声;它实际上在输出数据之前会自动使用 htmlspecialchars 重新编码。

试试!! html_entity_decode($ads-&gt;ad1) !! 或类似的东西。我不确定它是如何存储的,因此您可能需要进行不同的解码,但这里的关键是使用 !! !!,它显示原始的、未转义的数据。

见https://laravel.com/docs/5.6/blade#displaying-data

【讨论】:

【参考方案2】:

是“”刀片回声;它实际上在输出数据之前会自动使用 htmlspecialchars 重新编码。

【讨论】:

这不是一个答案,你最好在评论中发布它

以上是关于Laravel如何将HTML保存到数据库然后检索它的主要内容,如果未能解决你的问题,请参考以下文章

表的laravel循环值然后将其保存到数据库

如何使用 Alamofire 将用户配置文件图像保存到 MYSQL 数据库,然后在以下屏幕上检索

如何将数据从 laravel 传递到 Vue Router?

如何从另一个表中检索并再次将其输入到 laravel 中的另一个表中?

我可以使用一个按钮将数据保存在 sharedPreferences 中,然后使用另一个按钮来检索它吗?

如何将变量附加到 Auth::user() 然后保存并缓存它?