鍍金池/ 問答/PHP/ 在laravel blade模板中,顯示不出數(shù)據(jù)庫(kù)存儲(chǔ)的大括號(hào)。

在laravel blade模板中,顯示不出數(shù)據(jù)庫(kù)存儲(chǔ)的大括號(hào)。

我在數(shù)據(jù)庫(kù)中存了一段示例代碼,如下所示:

<div class="container">
        @foreach ($users as $user)
            {{ $user->name }}
        @endforeach
    </div>
    
    {{ $users->links() }}

數(shù)據(jù)庫(kù)內(nèi)容如下圖:
圖片描述

然后想通過(guò)blade模板完全顯示出來(lái),就像很多教程一樣,把示例代碼顯示在網(wǎng)頁(yè)上。
但是打開網(wǎng)頁(yè)測(cè)試了一下,發(fā)現(xiàn)網(wǎng)頁(yè)是空白,只要把大括號(hào){{}}去掉或改成其他,就會(huì)正常顯示。
有沒有什么方法可以把大括號(hào){{}}也直接顯示出來(lái)?

我又測(cè)試幾次,當(dāng)我這樣寫的時(shí)候,
圖片描述

也同樣不會(huì)顯示示例代碼
路由代碼如下:

Route::get('test', function () {
    $data = '<pre><code>
    &lt;div class=&quot;container&quot;&gt;
        @foreach ($users as $user)
            {{ $user-&gt;name }}
        @endforeach
    &lt;/div&gt;
    {{ $users-&gt;links() }}
    </code></pre>';
    
    return view('test', compact('data'));
});

test.blade.php代碼如下:

@extends('layouts.app')

@section('content')
    {!! $data  !!}
@endsection

app.blade.php代碼如下:

<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- CSRF Token -->
    <meta name="csrf-token" content="{{ csrf_token() }}">

    <title>{{ config('app.name', 'Laravel') }}</title>

    <!-- Styles -->
    <link href="{{ asset('css/app.css') }}" rel="stylesheet">
    <link href="{{ asset('css/fontawesome-all.css') }}" rel="stylesheet">

    <style>
        html, body {
            font-family: 'Helvetica', '微軟雅黑';
        }
    </style>
</head>
<body>
    <div id="app">
        <nav class="navbar navbar-default navbar-static-top">
            <div class="container">
                <div class="navbar-header">

                    <!-- Collapsed Hamburger -->
                    <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#app-navbar-collapse" aria-expanded="false">
                        <span class="sr-only">Toggle Navigation</span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>

                    <!-- Branding Image -->
                    <a class="navbar-brand" href="{{ url('/') }}">
                        {{ config('app.name', 'Laravel') }}
                    </a>
                </div>

                <div class="collapse navbar-collapse" id="app-navbar-collapse">
                    <!-- Left Side Of Navbar -->
                    <ul class="nav navbar-nav">
                        &nbsp;
                    </ul>

                    <!-- Right Side Of Navbar -->
                    <ul class="nav navbar-nav navbar-right">
                        <!-- Authentication Links -->
                        @guest
                            <li><a href="{{ route('login') }}">Login</a></li>
                            <li><a href="{{ route('register') }}">Register</a></li>
                        @else
                            <li class="dropdown">
                                <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true">
                                    {{ Auth::user()->name }} <span class="caret"></span>
                                </a>

                                <ul class="dropdown-menu">
                                    <li>
                                        <a href="{{ route('logout') }}"
                                            onclick="event.preventDefault();
                                                     document.getElementById('logout-form').submit();">
                                            Logout
                                        </a>

                                        <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
                                            {{ csrf_field() }}
                                        </form>
                                    </li>
                                </ul>
                            </li>
                        @endguest
                    </ul>
                </div>
            </div>
        </nav>

        @yield('content')
    </div>

    <!-- Scripts -->
    <script src="{{ asset('js/app.js') }}"></script>
    <script src="{{ asset('ckeditor/ckeditor.js') }}"></script>
    <script>
        // Replace the <textarea id="editor1"> with a CKEditor
        // instance, using default configuration.
        CKEDITOR.replace( 'contents' );
    </script>
</body>
</html>

雙括號(hào)不寫完整是可以顯示的如下
clipboard.png

如果寫完整后保存提交,編輯如下
clipboard.png

再打開顯示,全是空白,導(dǎo)航欄都沒有了
clipboard.png

除非修改雙大括號(hào),才會(huì)顯示出來(lái)

回答
編輯回答
安若晴

花了幾天功夫原因終于找出來(lái)了,是layouts.app模板的問題,把前端資源替換掉
注釋

<script src="{{ asset('js/app.js') }}"></script>

換成

<script src="{{ asset('js/jquery-3.3.1.min.js') }}"></script>
<script src="{{ asset('js/bootstrap.min.js') }}"></script>

其他地方相應(yīng)的修改,最后顯示一切正常,

clipboard.png

2018年2月15日 22:55
編輯回答
嘟尛嘴

難道不應(yīng)該是用 {!! $name !!} 嗎?

默認(rèn)情況下,Blade 的 {{ }} 語(yǔ)法將會(huì)自動(dòng)調(diào)用 PHP htmlspecialchars 函數(shù)來(lái)避免 XSS 攻擊。如果你不想你的數(shù)據(jù)被轉(zhuǎn)義,你可以使用下面的語(yǔ)法:

Hello, {!! $name !!}.


提問者 @wulijieone 反應(yīng)說(shuō)顯示不出來(lái),我在 Laravel5.5 進(jìn)行了測(cè)試,是可以的。截圖如下:

clipboard.png

clipboard.png

clipboard.png

clipboard.png


再更:
使用 htmlspecialchars_decode 函數(shù)轉(zhuǎn)義下就可以了。

2018年3月25日 17:28