web-dev-qa-db-ja.com

Laravel 5:Bladeを使ってHTMLを表示する

このように、ビューの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を正しく表示します。

199
lesssugar

あなたが使用する必要があります

{!! $text !!}

{{ $text }}を使用すると、文字列は自動的にエスケープされます。

488
terry low

Laravel 5用

{!!html_entity_decode($text)!!}

この link を通して考え出した、RachidLaasriの回答を見てください

49
Praveen Dabral

これを試すことができます:

{!! $text !!}

あなたは見ている必要があります: http://laravel.com/docs/5.0/upgrade#upgrade-5.0

34
rap-2-h

使ってください

{!! $test !!} 

HTMLの場合のみ、データをレンダリングしたい場合は、文字列などを使用します。

{{ $test }}

これは、ブレードファイルがコンパイルされたときです。

{{ $test }}<?php echo e($test) ?>に変換されます

{!! $test !!}<?php echo $test ?>に変換されます

13
Shubham Bansal

別の方法があります。オブジェクトの目的がhtmlをレンダリングすることであれば、toHtml()メソッドを持つ\Illuminate\Contracts\Support\Htmlableコントラクトを実装できます。

それから、そのオブジェクトをbladeから次のようにレンダリングできます。{{ $someObject }}(注、{!! !!}構文は必要ありません)。

また、htmlプロパティを返して、それがhtmlになることがわかっている場合は、次のように\Illuminate\Support\HtmlStringクラスを使用します。

public function getProductDescription()
{
    return new HtmlString($this->description);
}

そしてそれを{{ $product->getProductDescription() }}のように使います。

生のHTMLを直接ページ上にレンダリングするときはもちろん責任があります。

7
Damir Miladinov

これを試して。それは私のために働きました。

{{ html_entity_decode($text) }}

Laravel Bladeテンプレートで、{{}}がhtmlをエスケープします。ビューのコントローラからHTMLを表示したい場合は、文字列からHTMLをデコードします。

7
Mohammed Safeer

あなたは{を使うことができます! LaravelでHTMLコードをレンダリングするための$ text !!}

{!! $text !!}

使うなら

{{ $text }}

HTMLコードをレンダリングせず、文字列として印刷しません。

4
PPL

あなたはlaravel 5で多くの方法ですることができます..

{!! $text !!}

{!! html_entity_decode($text) !!}
3
Jignesh Joisar

エスケープせずにデータを表示するには、{!! $text !!}を使用します。ユーザーから取得したデータやクリーンアップされていないデータを使用しないでください。

2
Patrick Luy

その単純な

{!! $text !!}

dom要素としてlaravelコンパイルし、文字列として{{$text}}を出力する

1

以下のような場合に最初に使う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番目の方法がブレードの中古三項演算子に最適であることを願っています。

1
Uzair

これはLaravel 5.6では問題なく動作します。

<?php echo "$text"; ?>

別の方法で

{!! $text !!}

HTMLコードをレンダリングせず、文字列として印刷しません。

詳しくはオープンリンクをご覧ください。 - Bladeを使ってHTMLを表示します

1
Udhav Sarvaiya

データをエスケープしたい場合

{{ $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ドキュメントを見てください

html_entity_decode - php.net

1
Reiah Paul Sam

Textarea内でTinymceとマークアップを使う人のために:

{{ htmlspecialchars($text) }}
0
Hung

私はそこに行ったことがあり、それは私のせいでした。そして愚かなもの。

ファイル名に.blade拡張子を忘れた場合、そのファイルはbladeを認識しませんがphpコードを実行します。あなたが使うべきです

/resources/views/filename.blade.php

の代わりに

/resources/views/filename.php

これが誰かに役立つことを願っています

0
Ali Aydin

これを試して、それはうまくいった:

@php 
   echo $text; 
@endphp
0
ShuBham GuPta