Я строю небольшую 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-теги, а не экранировать их.
Измените свой синтаксис с {{ }}
в {!! !!}
,
Как Альфа сказал в комментарии выше (не ответ, так что я думал, что я опубликую), в Laravel 5, {{ }}
(ранее неэкранированный синтаксис вывода) был изменен на {!! !!}
, замещать {{ }}
с {!! !!}
и это должно работать.
используйте этот тег {!! текст описания !!}
Включить содержимое в {! !}.
Я была такая же проблема. Спасибо за ответы выше, я решил свою проблему. Если есть люди, сталкивающиеся с одной и той же проблемой, есть два способа ее решения:
{!! $news->body !!}
<?php echo $string ?>
Я надеюсь, что это помогает.
Нет проблем с отображением 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
учебный класс
{{html_entity_decode ($ post-> content ())}} сохранил проблему для меня с Laravel 4.0. Теперь мой HTML-контент интерпретируется как следует.