Je construis un petit CMS dans Laravel et j'ai essayé de montrer le contenu (qui est stocké dans la base de données). Il montre les balises HTML au lieu de les exécuter. C'est comme s'il y avait un auto html_entity_decode pour toutes les données imprimées.
<?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);
}
}
J'ai essayé d'imprimer le contenu à l'aide de l'accolade.
{{ $content->page_desc }}
et triple accolade.
{{{ $content->page_desc }}}
Et ils donnent le même résultat. Je dois exécuter ces balises HTML au lieu de les échapper.
Changez votre syntaxe de {{ }}
à {!! !!}
.
Comme The Alpha l’a dit dans un commentaire ci-dessus (pas une réponse, j’ai pensé que je posterais), dans Laravel 5, le {{ }}
(syntaxe de sortie précédemment non échappée) a été remplacé par {!! !!}
. Remplacer {{ }}
avec {!! !!}
et ça devrait marcher.
utilisez cette balise {!! texte de description !!}
Inclure le contenu dans {! !}.
J'ai eu le même problème. Merci pour les réponses ci-dessus, j'ai résolu mon problème. S'il y a des gens qui font face au même problème, voici deux manières de le résoudre:
{!! $news->body !!}
<?php echo $string ?>
J'espère que ça aide.
L'affichage de code HTML dans les modèles de lames ne pose aucun problème.
Pour le test, vous pouvez ajouter à routes.php un seul itinéraire:
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);
}
);
et en hello.blade.php
fichier:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
{{ $content->page_desc }}
</body>
</html>
Pour le code suivant, vous obtiendrez une sortie comme sur l'image
Alors probablement page_desc
dans votre cas, ce n’est pas ce que vous attendez. Mais comme vous le voyez, cela peut être dangereux si quelqu'un utilise, par exemple, la balise '`;
EDIT
Je l'ai aussi testé en mettant le même code dans la base de données:
Route::get('/', function () {
$data = User::where('id','=',1)->first();
return View::make('hello')->with('content', $data);
}
);
La sortie est exactement la même dans ce cas
Edit2
Je ne sais pas non plus si Pages
est votre modèle ou un modèle de fournisseur. Par exemple, il peut avoir un accesseur à l'intérieur:
public function getPageDescAttribute($value)
{
return htmlspecialchars($value);
}
et puis quand vous obtenez page_desc
attribut, vous aurez modifié page_desc
avec htmlspecialchars
. Donc, si vous êtes sûr que les données dans la base de données sont en HTML brut (non échappé), vous devriez regarder cette classe Pages