Mam ciąg znaków zwrócony do jednego z moich widoków, takiego jak ten:
$text = '<p><strong>Lorem</strong> ipsum dolor <img src="images/test.jpg"></p>'
Próbuję wyświetlić go za pomocą Blade:
{{$text}}
Jednak wynikiem wyjściowym jest nieprzetworzony ciąg zamiast renderowanego HTML. Jak wyświetlić HTML za pomocą Blade'a w Laravel 5?
PS. PHP echo()
wyświetla poprawnie HTML.
{!! nl2br($post->description) !!}
działa dla mnie, jeśli mam tylko spacje i br.Odpowiedzi:
Musisz użyć
Ciąg automatycznie ucieknie podczas używania
{{ $text }}
.źródło
Hello, {!! $name !!}.
” laravel.com/docs/5.5/blade#displaying-data$text
zawiera dane wejściowe od użytkownika i nie uniknąłeś tego poprawnie. Na przykład$text = 'Hello <b>'.$_GET['name'].'</b>';
jest niebezpieczny, ponieważ$_GET['name']
może zawierać HTML, który pozwoliłby XSS. Mógłbyś zrobić$text = 'Hello <b>'.htmlentities($_GET['name']).'</b>';
i byłby bezpieczny.<meta cc="grâce à">
i chcę to pokazać ostrzem, to tak będzie wyglądać<meta cc="grâce à">
. Więc odpowiedź dla mnie to @Praveen_Dabral'sDla laravel 5
Zorientowany przez ten link , patrz odpowiedź RachidLaasri
źródło
Możesz spróbować:
Powinieneś spojrzeć na: http://laravel.com/docs/5.0/upgrade#upgrade-5.0
źródło
Proszę użyć
Tylko w przypadku HTML, jeśli chcesz renderować dane, żądło itp. Użyj
Dzieje się tak, ponieważ podczas kompilowania pliku bloku
{{ $test }}
jest konwertowany na<?php echo e($test) ?>
while{!! $test !!}
jest konwertowany na<?php echo $test ?>
źródło
Jest inny sposób. Jeśli celem obiektu jest renderowanie HTML, możesz zaimplementować
\Illuminate\Contracts\Support\Htmlable
taką umowętoHtml()
metodę.Następnie możesz wyrenderować ten obiekt z bloku w następujący sposób:
{{ $someObject }}
(uwaga, nie ma takiej potrzeby){!! !!}
składni).Również jeśli chcesz zwrócić właściwość html i wiesz, że będzie to html, użyj
\Illuminate\Support\HtmlString
klasy w następujący sposób:a następnie użyj go jak
{{ $product->getProductDescription() }}
.Oczywiście ponosisz odpowiedzialność za bezpośrednie renderowanie surowego kodu HTML na stronie.
źródło
Spróbuj tego. To zadziałało dla mnie.
W szablonie Laravel Blade {{}} ucieknie HTML. Jeśli chcesz wyświetlić HTML z kontrolera, odkoduj HTML z łańcucha.
źródło
Możesz użyć {!! $ text !!} do renderowania kodu HTML w Laravel
Jeśli użyjesz
Nie będzie renderować kodu HTML i drukować jako ciąg.
źródło
Służy
{!! $text !!}
do wyświetlania danych bez ucieczki. Tylko upewnij się, że nie robisz tego z danymi, które pochodzą od użytkownika i nie zostały wyczyszczone.źródło
to jest proste
laravel kompiluje się jako element dom i
{{$text}}
wypisuje jako ciągźródło
możesz zrobić na wiele sposobów w laravel 5 ..
źródło
Możesz to zrobić na trzy sposoby, najpierw użyj, jeśli warunek taki jak poniżej
Drugi sposób
Trzeci i właściwy sposób użycia trójskładnikowego operatora na ostrzu
Mam nadzieję, że trzeci sposób jest idealny dla używanego operatora trójskładnikowego na ostrzu.
źródło
Aby dodać dalsze wyjaśnienia, kod w
{{ }}
instrukcjach Blade jest automatycznie przekazywany przezhtmlspecialchars()
funkcję udostępnianą przez php. Ta funkcja pobiera ciąg znaków i znajdzie wszystkie zastrzeżone znaki, których używa HTML. Znaki zastrzeżone to&
<
>
i"
. Następnie zastąpi te zastrzeżone znaki ich wariantem encji HTML. Które są następujące:Załóżmy na przykład, że mamy następującą instrukcję php:
Przekazany do ostrza, tak jak
{{ $hello }}
dałby literalny ciąg znaków, który przekazałeś:Pod maską odbija się echem jak
<b>Hello<b>
Jeśli chcemy to ominąć i wyrenderować jako pogrubiony znacznik, uciekamy od
htmlspecialchars()
funkcji, dodając blok składni Escape:{!! $hello !!}
Pamiętaj, że używamy tylko jednego nawiasu klamrowego.
Wynik powyższego przyniósłby:
dzień dobry
Możemy również użyć innej przydatnej funkcji, którą zapewnia php, która jest
html_entity_decode()
funkcją. Spowoduje to konwersję jednostek HTML na ich respektowane znaki HTML. Pomyśl o tym jak o odwrociehtmlspecialchars()
Na przykład powiedzmy, że mamy następującą instrukcję php:
Możemy teraz dodać tę funkcję do naszej instrukcji ucieczki ostrza:
Spowoduje to pobranie encji HTML
<
i parsowanie jej jako kodu HTML<
, a nie tylko ciągu.To samo będzie miało zastosowanie w przypadku podmiotu większego niż
>
który dałby
dzień dobry
Chodzi przede wszystkim o uniknięcie ataków XSS. Dlatego zachowaj ostrożność podczas korzystania ze składni Escape, zwłaszcza jeśli użytkownicy w Twojej aplikacji sami dostarczają kod HTML, mogą wprowadzić własny kod według własnego uznania.
źródło
Jeśli chcesz uciec od danych, użyj
Jeśli nie chcesz uciec przed użyciem danych
Ale do Laravel-4 możesz użyć
Jeśli chodzi o Laravel-5
Możesz to również zrobić za pomocą funkcji PHP
przejrzyj dokument PHP, aby uzyskać parametry tej funkcji
html_entity_decode - php.net
źródło
Działa to dobrze dla Laravel 5.6
W inny sposób
Nie będzie renderować kodu HTML i drukować jako ciąg.
Aby uzyskać więcej informacji, otwórz link: - Wyświetl HTML za pomocą Blade
źródło
Dla tych, którzy używają tinymce i znaczników w obszarze tekstowym:
źródło
Byłem tam i to była moja wina. I bardzo głupi.
jeśli zapomnisz rozszerzenia .blade w nazwie pliku, plik ten nie rozumie bloku, ale uruchamia kod php. Powinieneś użyć
zamiast
mam nadzieję, że to komuś pomoże
źródło
Spróbuj tego, zadziałało:
źródło
Jeśli używasz klasy Bootstrap Collapse, czasami
{!! $text !!}
nie działa to dla mnie, ale{{ html_entity_decode($text) }}
działa dla mnie.źródło