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-теги, а не экранировать их.

47

Решение

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

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

117

Другие решения

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

13

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

7

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

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

Я надеюсь, что это помогает.

4

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

Для теста вы можете добавить в rout.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>

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

Выход

Так наверное 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, Так что, если вы уверены, что данные в базе данных имеют сырой HTML (не экранированный), вы должны посмотреть на это Pages учебный класс

2

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

-3
По вопросам рекламы [email protected]