Подтвердить что ты не робот

Laravel Escaping Весь HTML в шаблоне Blade

Я строю небольшую CMS в Laravel, и я пытался показать содержимое (которое хранится в БД). Он показывает теги HTML, а не выполняет их. Это похоже на автоматический html_entity_decode для всех печатных данных.

<?php

class CmsController extends BaseController
{
    public function Content($name)
    {    
        $data = Pages::where('CID', '=', Config::get('company.CID'))
            ->where('page_name', '=', $name)
            ->first();

        return View::make('cms.page')->with('content', $data);
    }
}

Я попытался напечатать содержимое с помощью фигурной скобки.

{{ $content->page_desc }}

и тройная фигурная скобка.

{{{ $content->page_desc }}}

И они дают одинаковый результат. Мне нужно выполнить эти HTML-теги, а не экранировать их.

4b9b3361

Ответ 1

Измените свой синтаксис с {{ }} на {!! !!}.

Как сказал Альфа в комментарии выше (не ответ, поэтому я думал, что я опубликую), в Laravel 5, {{ }} (ранее неэксклюзивный выходной синтаксис) изменился на {!! !!}. Замените {{ }} на {!! !!}, и он должен работать.

Ответ 2

используйте этот тег {!! текст описания!}

Ответ 3

Включить содержимое в {!!}.

Ответ 4

У меня была такая же проблема. Спасибо за ответы выше, я решил свою проблему. Если есть люди, столкнувшиеся с одной и той же проблемой, вот два способа решить эту проблему:

  • Вы можете использовать {!! $news->body !!}
  • Вы можете использовать традиционное открывание php (это не рекомендуется), например: <?php echo $string ?>

Надеюсь, это поможет.

Ответ 5

Нет проблем с отображением HTML-кода в шаблонах клинков.

Для теста вы можете добавить route.php только один маршрут:

Route::get('/', function () {

        $data = new stdClass();
        $data->page_desc
            = '<strong>aaa</strong><em>bbb</em>
               <p>New paragaph</p><script>alert("Hello");</script>';

        return View::make('hello')->with('content', $data);
    }
);

и в hello.blade.php файле:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>

{{ $content->page_desc }}

</body>
</html>

Для следующего кода вы получите вывод как на изображении

Output

Так что, вероятно, page_desc в вашем случае не то, что вы ожидаете. Но, как вы видите, это может быть потенциально опасно, если кто-то использует, например, "тег", поэтому вы, вероятно, должны быть на своем пути, прежде чем назначать шаблону клинка, фильтровать теги

ИЗМЕНИТЬ

Я также протестировал его, поставив тот же код в базу данных:

Route::get('/', function () {

        $data = User::where('id','=',1)->first();

        return View::make('hello')->with('content', $data);
    }
);

В этом случае вывод будет таким же.

Edit2

Я также не знаю, является ли Pages вашей моделью или моделью поставщика. Например, он может иметь доступ внутрь:

public function getPageDescAttribute($value)
{
    return htmlspecialchars($value);
}

а затем, когда вы получите атрибут page_desc, вы получите изменение page_desc с помощью htmlspecialchars. Поэтому, если вы уверены, что данные в базе данных с raw html (не экранированы), вы должны посмотреть на этот Pages класс

Ответ 6

{{html_entity_decode ($ post- > content())}} сохранил проблему для меня с Laravel 4.0. Теперь мой HTML-контент интерпретируется так, как должен.