Eu tenho uma string retornada para uma das minhas visualizações, assim:
$text = '<p><strong>Lorem</strong> ipsum dolor <img src="images/test.jpg"></p>'
Estou tentando exibi-lo com o Blade:
{{$text}}
No entanto, a saída é uma sequência bruta em vez de HTML renderizado. Como exibir HTML com o Blade no Laravel 5?
PS. O PHP echo()
exibe o HTML corretamente.
{!! nl2br($post->description) !!}
funciona para mim se eu tiver apenas espaços e br.Respostas:
Você precisa usar
A corda escapará automaticamente ao usar
{{ $text }}
.fonte
Hello, {!! $name !!}.
" laravel.com/docs/5.5/blade#displaying-data$text
contiver entrada do usuário e você não tiver escapado adequadamente. Por exemplo,$text = 'Hello <b>'.$_GET['name'].'</b>';
é perigoso porque$_GET['name']
pode incluir HTML, o que permitiria o XSS. Você poderia fazer$text = 'Hello <b>'.htmlentities($_GET['name']).'</b>';
e estaria seguro.<meta cc="grâce à">
e quero mostrá-lo na lâmina, ficará assim<meta cc="grâce à">
. Então a resposta para mim é @Praveen_Dabral 'sPara laravel 5
Descoberto através deste link , consulte a resposta RachidLaasri
fonte
Você pode tentar isso:
Você deve dar uma olhada em: http://laravel.com/docs/5.0/upgrade#upgrade-5.0
fonte
Por favor, use
Somente no caso de HTML, se você quiser renderizar dados, picadas etc., use
Isso ocorre quando o arquivo blade é compilado
{{ $test }}
é convertido em<?php echo e($test) ?>
enquanto{!! $test !!}
é convertido para<?php echo $test ?>
fonte
Existe outro caminho. Se o objetivo do objeto for renderizar html, você poderá implementar o
\Illuminate\Contracts\Support\Htmlable
contrato que possui otoHtml()
métodoEm seguida, você pode renderizar esse objeto a partir do blade da seguinte maneira:
{{ $someObject }}
(observe, não há necessidade de{!! !!}
sintaxe).Além disso, se você deseja retornar a propriedade html e sabe que será html, use uma
\Illuminate\Support\HtmlString
classe como esta:e depois use-o como
{{ $product->getProductDescription() }}
.Obviamente, seja responsável ao renderizar diretamente o html bruto na página.
fonte
Tente isso. Funcionou para mim.
No modelo Laravel Blade, {{}} escapará do html. Se você deseja exibir o html do controlador à vista, decodifique o html da string.
fonte
Você pode usar {!! $ text !!} para renderizar código HTML no Laravel
Se você usar
Não renderizará código HTML e será impresso como uma sequência.
fonte
Use
{!! $text !!}
para exibir dados sem escapar. Apenas certifique-se de não fazer isso com os dados que vieram do usuário e não foram limpos.fonte
é um simples
laravel compila como um elemento dom e
{{$text}}
imprime como uma stringfonte
você pode fazer de várias maneiras no laravel 5 ..
fonte
Você pode fazer isso usando três maneiras pela primeira vez, se a condição estiver abaixo
A segunda maneira
A terceira e adequada maneira de usar o operador ternário na lâmina
Espero que a terceira maneira seja perfeita para o operador ternário usado na lâmina.
fonte
Para adicionar mais explicações, o código dentro das
{{ }}
instruções do Blade é passado automaticamente através dahtmlspecialchars()
função que o php fornece. Essa função usa uma string e encontrará todos os caracteres reservados que o HTML usa. Caracteres reservados são&
<
>
e"
. Ele substituirá esses caracteres reservados por sua variante de entidade HTML. Quais são os seguintes:Por exemplo, suponha que tenhamos a seguinte instrução php:
Passado para o blade como
{{ $hello }}
produziria a string literal que você passou:Sob o capô, ele realmente ecoaria como
<b>Hello<b>
Se quiséssemos contornar isso e renderizá-lo como uma marca em negrito, escapamos da
htmlspecialchars()
função adicionando a sintaxe de escape que o blade fornece:{!! $hello !!}
Observe que usamos apenas uma chave.
O resultado do exposto acima produziria:
Olá
Também poderíamos utilizar outra função útil que o php fornece, que é a
html_entity_decode()
função. Isso converterá entidades HTML em seus caracteres HTML respeitados. Pense nisso como o reverso dehtmlspecialchars()
Por exemplo, digamos que temos a seguinte instrução php:
Agora poderíamos adicionar esta função à nossa instrução blade de escape:
Isso pegará a entidade HTML
<
e a analisará como código HTML<
, não apenas como uma string.O mesmo se aplica à entidade maior que
>
o que renderia
Olá
O ponto principal de escapar em primeiro lugar é evitar ataques XSS. Portanto, tenha muito cuidado ao usar a sintaxe de escape, especialmente se os usuários do seu aplicativo estiverem fornecendo o HTML eles mesmos, eles poderão injetar seu próprio código como desejarem.
fonte
Se você quiser escapar dos dados, use
Se não quiser escapar dos dados, use
Mas até o Laravel-4 você pode usar
Quando chega o Laravel-5
Você também pode fazer isso com a função PHP
analise o documento PHP para obter os parâmetros dessa função
html_entity_decode - php.net
fonte
Isso funciona bem para o Laravel 5.6
De uma maneira diferente
Não renderizará código HTML e será impresso como uma sequência.
Para mais detalhes, acesse o link: - Exibir HTML com Blade
fonte
Para quem usa tinymce e marcação na área de texto:
fonte
Eu estive lá e foi minha culpa. E muito estúpido.
se você esquecer a extensão .blade no nome do arquivo, esse arquivo não entenderá o blade, mas executará o código php. Você deveria usar
ao invés de
espero que isso ajude alguém
fonte
Tente isso, já funcionou:
fonte
Se você usar a classe Bootstrap Collapse, às vezes,
{!! $text !!}
não funciona para mim, mas{{ html_entity_decode($text) }}
funciona para mim.fonte