Laravel 5: ब्लेड के साथ HTML प्रदर्शित करें


283

मेरे पास मेरे विचारों में से एक स्ट्रिंग है, जैसे:

$text = '<p><strong>Lorem</strong> ipsum dolor <img src="images/test.jpg"></p>'

मैं इसे ब्लेड के साथ प्रदर्शित करने का प्रयास कर रहा हूं:

{{$text}}

हालाँकि, आउटपुट HTML प्रदान करने के बजाय एक कच्चा स्ट्रिंग है। मैं Laravel 5 में ब्लेड के साथ HTML कैसे प्रदर्शित करूँ?

पुनश्च। PHP echo()HTML को सही तरीके से प्रदर्शित करती है।


2
{!! nl2br($post->description) !!}मेरे लिए काम करता है अगर मेरे पास केवल रिक्त स्थान और ब्र है।
मुहम्मद शहजाद

जवाबों:


651

आपको उपयोग करने की आवश्यकता है

{!! $text !!}

उपयोग करते समय स्ट्रिंग ऑटो से बच जाएगी {{ $text }}


5
यहाँ Laravel डॉक्स कि यह उल्लेख कर रहे हैं: "आप अपने डेटा भाग निकले जा नहीं करना चाहती हैं, तो आप निम्न सिंटैक्स का उपयोग कर सकते हैं Hello, {!! $name !!}." laravel.com/docs/5.5/blade#displaying-data
रयान

1
मैं यह भी सोच रहा हूं कि @Ryan ने क्या उल्लेख किया है। क्या यह सुरक्षा मुद्दा नहीं है?
सैंडर्स

@ सैंडर्स यह काफी संभावना है कि अगर $textउपयोगकर्ता इनपुट शामिल है और आप इसे ठीक से नहीं बचा पाए तो यह एक सुरक्षा समस्या है। उदाहरण के लिए, $text = 'Hello <b>'.$_GET['name'].'</b>';खतरनाक है क्योंकि $_GET['name']इसमें HTML शामिल हो सकता है, जो XSS की अनुमति देगा। आप कर सकते थे $text = 'Hello <b>'.htmlentities($_GET['name']).'</b>';और सुरक्षित रहेंगे।
क्रिस्टोफर के।

इस खुराक पूरी चाल नहीं है! अगर मुझे कुछ पसंद था <meta cc="grâce à">और मैं इसे ब्लेड में दिखाना चाहता हूं, तो यह इस तरह दिखेगा <meta cc="gr&acirc;ce &agrave;">। तो मेरे लिए जवाब है @Praveen_Dabral का
Brahimm



18

इस्तेमाल करें

{!! $test !!} 

केवल HTML के मामले में जबकि आप डेटा, स्टिंग आदि का उपयोग करना चाहते हैं

{{ $test }}

ऐसा इसलिए है क्योंकि जब आपकी ब्लेड फ़ाइल संकलित की जाती है

{{ $test }}<?php echo e($test) ?> जबकि परिवर्तित है

{!! $test !!} में परिवर्तित हो जाता है <?php echo $test ?>


13

एक और तरीका है। यदि ऑब्जेक्ट उद्देश्य html रेंडर करना है तो आप \Illuminate\Contracts\Support\Htmlableउस अनुबंध को लागू कर सकते हैं जिसमें toHtml()विधि है।

फिर आप ब्लेड से उस वस्तु को इस तरह से प्रस्तुत कर सकते हैं: {{ $someObject }}(ध्यान दें, {!! !!}वाक्यविन्यास की कोई आवश्यकता नहीं है )।

यदि आप html प्रॉपर्टी वापस करना चाहते हैं और आपको पता है कि यह html होगा, तो \Illuminate\Support\HtmlStringइस तरह से क्लास का उपयोग करें:

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

और फिर इसका उपयोग करें {{ $product->getProductDescription() }}

जब पृष्ठ पर सीधे कच्चे HTML रेंडर किया जाता है, तो निश्चित रूप से जिम्मेदार होना चाहिए।


11

इसे इस्तेमाल करे। इसने मेरे लिए काम किया।

{{ html_entity_decode($text) }}

लारावेल ब्लेड टेम्पलेट में, {{}} wil एस्केप html। यदि आप नियंत्रक से HTML प्रदर्शित करना चाहते हैं, तो स्ट्रिंग से html को डिकोड करें।


3
यह सही नहीं है, यह उन जवाबों से ऊपर है जो आपके तरीके से किए जा सकते हैं, यह सिर्फ पोरग्राम को भ्रमित कर रहा है
मिलाद

8

आप उपयोग कर सकते हैं {!! $ टेक्स्ट !!} लारवेल में HTML कोड रेंडर करने के लिए

{!! $text !!}

यदि तुम प्रयोग करते हो

{{ $text }}

यह HTML कोड रेंडर नहीं करेगा और एक स्ट्रिंग के रूप में प्रिंट करेगा।


5

{!! $text !!}डेटा से बचने के लिए इसे प्रदर्शित करने के लिए उपयोग करें । बस यह सुनिश्चित करें कि आप ऐसा डेटा के साथ नहीं करते हैं जो उपयोगकर्ता से आया है और साफ नहीं किया गया है।


5

यह एक सरल है

{!! $text !!}

लार्वा एक प्रमुख तत्व के रूप में संकलित करता है और {{$text}}एक स्ट्रिंग के रूप में प्रिंट करता है


5

आप लार्वा 5 में कई तरीकों से कर सकते हैं।

{!! $text !!}

{!! html_entity_decode($text) !!}

यदि आप कूट टैग (& lt; p & gt; हैलो वर्ल्ड; & lt; / p & gt;) को db से ऊपर कोड कामों में संग्रहीत करते हैं ... धन्यवाद !!!
narasimharaosp

4

आप यह कर सकते हैं कि नीचे की तरह अगर हालत पहले तीन तरीकों का उपयोग करें

{!! $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>

ब्लेड पर टर्नरी ऑपरेटर के उपयोग के लिए तीसरा और उचित तरीका

<td class="nowrap">
      {!! $order->status=='0' ? 
          '<button class="btn btn-danger">Inactive</button> : 
          '<button class="btn btn-success">Active</button> !!}
</td>

मुझे उम्मीद है कि ब्लेड पर इस्तेमाल किए जाने वाले टर्नरी ऑपरेटर के लिए तीसरा तरीका सही है।


4

आगे की व्याख्या जोड़ने के लिए, ब्लेड {{ }}स्टेटमेंट के अंदर कोड स्वचालित रूप से उस htmlspecialchars()फ़ंक्शन के माध्यम से पारित किया जाता है जो php प्रदान करता है। यह फ़ंक्शन एक स्ट्रिंग में लेता है और उन सभी आरक्षित वर्णों को खोजेगा जो HTML उपयोग करता है। आरक्षित वर्ण हैं & < >और "। यह तब इन आरक्षित वर्णों को उनके HTML इकाई संस्करण के साथ बदल देगा। जो निम्नलिखित हैं:

|---------------------|------------------|
|      Character      |       Entity     |
|---------------------|------------------|
|          &          |       &amp;      |
|---------------------|------------------|
|          <          |       &lt;       |
|---------------------|------------------|
|          >          |       &gt;       |
|---------------------|------------------|
|          "          |       &quot;     |
|---------------------|------------------|

उदाहरण के लिए, मान लें कि हमारे पास निम्नलिखित php स्टेटमेंट है:

$hello = "<b>Hello</b>";

ब्लेड में उत्तीर्ण होने के कारण आपके द्वारा उत्तीर्ण {{ $hello }}शाब्दिक तार निकलेगा:

<b>Hello</b>

हुड के तहत, यह वास्तव में गूंज होगा &lt;b&gt;Hello&lt;b&gt

यदि हम इसे बायपास करना चाहते हैं और वास्तव में इसे एक बोल्ड टैग के रूप में प्रस्तुत करते हैं, तो हम htmlspecialchars()एस्केप सिंटैक्स ब्लेड प्रदान करके फ़ंक्शन से बचते हैं:

{!! $hello !!}

ध्यान दें कि हम केवल एक घुंघराले ब्रेस का उपयोग करते हैं।

उपरोक्त का उत्पादन होगा:

हैलो

हम एक और उपयोगी फ़ंक्शन का भी उपयोग कर सकते हैं जो php प्रदान करता है, जो कि html_entity_decode()फ़ंक्शन है। यह HTML संस्थाओं को उनके सम्मानित HTML वर्णों में बदल देगा। इसे उल्टा समझोhtmlspecialchars()

उदाहरण के लिए, हमारे पास निम्नलिखित php स्टेटमेंट है:

$hello = "&lt;b&gt; Hello &lt;b&gt;";

अब हम इस समारोह को अपने बच गए ब्लेड स्टेटमेंट में जोड़ सकते हैं:

{!! html_entity_decode($hello) !!}

यह HTML इकाई लेगा &lt;और इसे HTML कोड के रूप में पार्स करेगा <, न कि केवल एक स्ट्रिंग के रूप में।

इकाई से अधिक के साथ भी यही लागू होगा &gt;

जो उपज देगा

हैलो

पहली जगह पर भागने का पूरा बिंदु XSS हमलों से बचने के लिए है। एस्केप सिंटैक्स का उपयोग करते समय बहुत सावधानी बरतें, खासकर यदि आपके एप्लिकेशन में उपयोगकर्ता स्वयं ही HTML प्रदान कर रहे हैं, तो वे अपने कोड को अपनी इच्छानुसार इंजेक्ट कर सकते हैं।


2

यदि आप डेटा के उपयोग से बचना चाहते हैं

{{ $html }}

यदि डेटा उपयोग से बचना नहीं चाहते हैं

{!! $html !!}

लेकिन लारवेल -4 तक आप उपयोग कर सकते हैं

{{ HTML::link('/auth/logout', 'Sign Out', array('class' => 'btn btn-default btn-flat')) }}

जब लारवेल -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


2

यह लारवेल 5.6 के लिए ठीक काम करता है

<?php echo "$text"; ?>

एक अलग तरीके से

{!! $text !!}

यह HTML कोड रेंडर नहीं करेगा और एक स्ट्रिंग के रूप में प्रिंट करेगा।

अधिक जानकारी के लिए लिंक खोलें: - HTML को ब्लेड से प्रदर्शित करें


1

टेक्सारिया के भीतर टिनिअम और मार्कअप का उपयोग करने वालों के लिए:

{{ htmlspecialchars($text) }}

0

मैं वहां गया हूं और यह मेरी गलती थी। और बहुत बेवकूफ एक।

यदि आप फ़ाइल नाम में .blade एक्सटेंशन भूल जाते हैं, तो वह फ़ाइल ब्लेड नहीं समझती है, लेकिन php कोड चलाता है। आपको उपयोग करना चाहिए

/resources/views/filename.blade.php

के बजाय

/resources/views/filename.php

आशा है कि यह कुछ मदद करता है



0

यदि आप बूटस्ट्रैप संक्षिप्त वर्ग का उपयोग करते हैं तो कभी-कभी {!! $text !!} मेरे लिए काम नहीं किया जाता है, लेकिन {{ html_entity_decode($text) }}मेरे लिए काम किया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.