このように、ビューの1つに文字列を返します。
$text = '<p><strong>Lorem</strong> ipsum dolor <img src="images/test.jpg"></p>'
私はBladeでそれを表示しようとしています:
{{$text}}
ただし、出力はレンダリングされたHTMLではなく生の文字列です。 Laravel 5にBladeを使用してHTMLを表示する方法を教えてください。
PS。 PHP echo()
はHTMLを正しく表示します。
あなたが使用する必要があります
{!! $text !!}
{{ $text }}
を使用すると、文字列は自動的にエスケープされます。
使ってください
{!! $test !!}
HTMLの場合のみ、データをレンダリングしたい場合は、文字列などを使用します。
{{ $test }}
これは、ブレードファイルがコンパイルされたときです。
{{ $test }}
は<?php echo e($test) ?>
に変換されます
{!! $test !!}
は<?php echo $test ?>
に変換されます
別の方法があります。オブジェクトの目的がhtmlをレンダリングすることであれば、toHtml()
メソッドを持つ\Illuminate\Contracts\Support\Htmlable
コントラクトを実装できます。
それから、そのオブジェクトをbladeから次のようにレンダリングできます。{{ $someObject }}
(注、{!! !!}
構文は必要ありません)。
また、htmlプロパティを返して、それがhtmlになることがわかっている場合は、次のように\Illuminate\Support\HtmlString
クラスを使用します。
public function getProductDescription()
{
return new HtmlString($this->description);
}
そしてそれを{{ $product->getProductDescription() }}
のように使います。
生のHTMLを直接ページ上にレンダリングするときはもちろん責任があります。
これを試して。それは私のために働きました。
{{ html_entity_decode($text) }}
Laravel Bladeテンプレートで、{{}}がhtmlをエスケープします。ビューのコントローラからHTMLを表示したい場合は、文字列からHTMLをデコードします。
あなたは{を使うことができます! LaravelでHTMLコードをレンダリングするための$ text !!}
{!! $text !!}
使うなら
{{ $text }}
HTMLコードをレンダリングせず、文字列として印刷しません。
あなたはlaravel 5で多くの方法ですることができます..
{!! $text !!}
{!! html_entity_decode($text) !!}
エスケープせずにデータを表示するには、{!! $text !!}
を使用します。ユーザーから取得したデータやクリーンアップされていないデータを使用しないでください。
その単純な
{!! $text !!}
dom要素としてlaravelコンパイルし、文字列として{{$text}}
を出力する
以下のような場合に最初に使う3つの方法を使ってそれを行うことができます
{!! $text !!}
第二の方法です
<td class="nowrap">
@if( $order->status == '0' )
<button class="btn btn-danger">Inactive</button>
@else
<button class="btn btn-success">Active</button>
@endif
</td>
ブレードで三項演算子を使用するための3番目の適切な方法
<td class="nowrap">
{!! $order->status=='0' ?
'<button class="btn btn-danger">Inactive</button> :
'<button class="btn btn-success">Active</button> !!}
</td>
私は3番目の方法がブレードの中古三項演算子に最適であることを願っています。
これはLaravel 5.6では問題なく動作します。
<?php echo "$text"; ?>
別の方法で
{!! $text !!}
HTMLコードをレンダリングせず、文字列として印刷しません。
詳しくはオープンリンクをご覧ください。 - Bladeを使ってHTMLを表示します
データをエスケープしたい場合
{{ $html }}
データをエスケープしたくない場合
{!! $html !!}
しかしLaravel-4までは使用できます
{{ HTML::link('/auth/logout', 'Sign Out', array('class' => 'btn btn-default btn-flat')) }}
Laravel-5に来ると
{!! HTML::link('/auth/logout', 'Sign Out', array('class' => 'btn btn-default btn-flat')) !!}
これをPHP関数でも行うことができます
{{ html_entity_decode($data) }}
この関数のパラメータについてはPHPドキュメントを見てください
Textarea内でTinymceとマークアップを使う人のために:
{{ htmlspecialchars($text) }}
私はそこに行ったことがあり、それは私のせいでした。そして愚かなもの。
ファイル名に.blade拡張子を忘れた場合、そのファイルはbladeを認識しませんがphpコードを実行します。あなたが使うべきです
/resources/views/filename.blade.php
の代わりに
/resources/views/filename.php
これが誰かに役立つことを願っています
これを試して、それはうまくいった:
@php
echo $text;
@endphp