লারাভেল 5: ফলক সহ HTML প্রদর্শন করুন


283

আমি আমার মতামতের একটিতে এই স্ট্রিংটি ফিরে পেয়েছি:

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

আমি এটি ব্লেড দিয়ে প্রদর্শন করার চেষ্টা করছি:

{{$text}}

যাইহোক, আউটপুটটি রেন্ডার এইচটিএমএল পরিবর্তে একটি কাঁচা স্ট্রিং। আমি কীভাবে ল্যারাভেল 5 এ ব্লেড সহ এইচটিএমএল প্রদর্শন করব?

পুনশ্চ. পিএইচপি echo()সঠিকভাবে এইচটিএমএল প্রদর্শন করে।


2
{!! nl2br($post->description) !!}আমার জন্য যদি আমার কেবল ফাঁকা জায়গা এবং br থাকে তবে কাজ করে।
মুহম্মদ শাহজাদ

উত্তর:


651

আপনার ব্যবহার করা দরকার

{!! $text !!}

স্ট্রিংটি ব্যবহার করার সময় স্বয়ংক্রিয়ভাবে পালাতে হবে {{ $text }}


5
এখানে লারাভেল ডক্স রয়েছে যা উল্লেখ করেছে: "আপনি যদি নিজের ডেটাটি এড়াতে না চান তবে আপনি নীচের বাক্য গঠনটি ব্যবহার করতে পারেন: Hello, {!! $name !!}." laravel.com/docs/5.5/blade#displaying-data
রায়ান

1
@ রায়ান যা উল্লেখ করেছেন তা নিয়েও আমি ভাবছি। এটি কি সুরক্ষার সমস্যা নয়?
Sanders

@ স্যান্ডার্স এটি $textব্যবহারকারীর ইনপুট থাকে এবং আপনি এটি সঠিকভাবে এড়াতে না পারলে এটি সম্ভবত একটি সুরক্ষা সমস্যা । উদাহরণস্বরূপ, $text = 'Hello <b>'.$_GET['name'].'</b>';বিপজ্জনক কারণ $_GET['name']এইচটিএমএল অন্তর্ভুক্ত থাকতে পারে, যা এক্সএসএসকে অনুমতি দেবে। আপনি করতে পারেন $text = 'Hello <b>'.htmlentities($_GET['name']).'</b>';এবং নিরাপদ হবে।
ক্রিস্টোফার কে।

এই ডোজ পুরো কৌশল না! যদি আমার মতো কিছু থাকে <meta cc="grâce à">এবং আমি এটি ব্লেডে দেখাতে চাই, এটি দেখতে এটির মতো দেখাবে <meta cc="gr&acirc;ce &agrave;">। সুতরাং আমার জন্য উত্তরটি হ'ল @ প্রবীণ_ডাব্রালের
ব্রাহিম



18

ব্যবহার করুন

{!! $test !!} 

আপনি যদি ডেটা, স্টিং ইত্যাদি ব্যবহার করতে চান তবে কেবল HTML এর ক্ষেত্রে

{{ $test }}

এটি কারণ যখন আপনার ফলক ফাইলটি সংকলিত হয়

{{ $test }}<?php echo e($test) ?> যখন রূপান্তরিত হয়

{!! $test !!} রূপান্তরিত হয় <?php echo $test ?>


13

আরও একটি উপায় আছে। যদি অবজেক্টের উদ্দেশ্য এইচটিএমএল রেন্ডার করা হয় তবে আপনি \Illuminate\Contracts\Support\Htmlableচুক্তিটি প্রয়োগ করতে পারেন যে toHtml()পদ্ধতি রয়েছে।

তারপরে আপনি সেই বস্তুকে ব্লেড থেকে এই জাতীয়ভাবে রেন্ডার করতে পারেন: {{ $someObject }}(দ্রষ্টব্য, {!! !!}বাক্য গঠনের প্রয়োজন নেই )।

এছাড়াও আপনি যদি এইচটিএমএল সম্পত্তি ফিরে আসতে চান এবং আপনি জানেন যে এটি এইচটিএমএল হবে তবে \Illuminate\Support\HtmlStringক্লাসটি এই জাতীয়ভাবে ব্যবহার করুন :

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

এবং তারপরে এটি ব্যবহার করুন {{ $product->getProductDescription() }}

পেজে সরাসরি কাঁচা এইচটিএমএল সরবরাহ করার সময় অবশ্যই দায়বদ্ধ থাকবেন।


11

এটা চেষ্টা কর. এটা আমার জন্য কাজ করেছে।

{{ html_entity_decode($text) }}

লারাভেল ফলক টেমপ্লেটে, {}} escape wil html। আপনি যদি নিয়ামক থেকে এইচটিএমএল প্রদর্শন করতে চান তবে স্ট্রিং থেকে এইচটিএমএল ডিকোড করুন।


3
এটি ঠিক নয় উপরের উত্তরগুলি এটি আপনার পোষাগরকে কেবল বিভ্রান্ত করার উপায়ে করা যেতে পারে
মিলাদ

8

তুমি ব্যবহার করতে পার {!! লারাভেলে এইচটিএমএল কোড রেন্ডার করার জন্য $ পাঠ্য !!।

{!! $text !!}

আপনি যদি ব্যবহার

{{ $text }}

এটি এইচটিএমএল কোড রেন্ডার করবে না এবং স্ট্রিং হিসাবে মুদ্রণ করবে না।


5

{!! $text !!}ডেটা এড়াতে ছাড়াই প্রদর্শন করতে ব্যবহার করুন । কেবলমাত্র নিশ্চিত হয়ে নিন যে আপনি যে ডেটা ব্যবহারকারীর কাছ থেকে এসেছেন এবং পরিষ্কার করা হয়নি তা দিয়ে এটি করবেন না।



5

আপনি লারাভেল 5 এ অনেক উপায়ে করতে পারেন ..

{!! $text !!}

{!! html_entity_decode($text) !!}

যদি আপনি এনকোডযুক্ত ট্যাগগুলি (& lt; p & gt; হ্যালো ওয়ার্ল্ড & & lt; / p & gt;) উপরের ডিবিতে কোড কাজ করে থাকেন ... ধন্যবাদ !!!
নারসিংহোড়াস্প

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()পিএইচপি সরবরাহ করে ফাংশনটির মাধ্যমে স্বয়ংক্রিয়ভাবে পাস হয়ে যায় । এই ফাংশনটি একটি স্ট্রিং নেয় এবং HTML ব্যবহার করে এমন সমস্ত সংরক্ষিত অক্ষর খুঁজে পেতে পারে। সংরক্ষিত অক্ষর & < >এবং "। এরপরে এই সংরক্ষিত অক্ষরগুলি তাদের HTML সত্তা বৈকল্পিকের সাথে প্রতিস্থাপন করবে। যা নিম্নলিখিত:

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

উদাহরণস্বরূপ, ধরে নিন আমাদের নীচের পিএইচপি বিবৃতি রয়েছে:

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

{{ $hello }}আপনি যে আক্ষরিক স্ট্রিংটি পেয়েছিলেন ফলক হিসাবে ফলক হিসাবে প্রবেশ করেছে:

<b>Hello</b>

ফণা অধীনে, এটি আসলে হিসাবে প্রতিধ্বনিত হবে &lt;b&gt;Hello&lt;b&gt

আমরা যদি এটিকে বাইপাস করতে এবং প্রকৃতপক্ষে এটিকে একটি সাহসী ট্যাগ হিসাবে উপস্থাপন করতে চাই, htmlspecialchars()তবে এস্কেপ সিনট্যাক্স ব্লেড সরবরাহ করে আমরা ফাংশনটি থেকে রক্ষা পাই :

{!! $hello !!}

মনে রাখবেন যে আমরা কেবল একটি কোঁকড়া ধনুর্বন্ধনী ব্যবহার করি।

উপরের ফলাফল আউট হবে:

হ্যালো

আমরা পিএইচপি সরবরাহ করে এমন একটি হ্যান্ডি ফাংশনও ব্যবহার করতে পারি যা html_entity_decode()ফাংশন। এটি এইচটিএমএল সত্তাকে তাদের সম্মানিত এইচটিএমএল অক্ষরে রূপান্তরিত করবে। এটিকে বিপরীত হিসাবে ভাবেনhtmlspecialchars()

উদাহরণস্বরূপ বলুন যে আমাদের নিম্নলিখিত পিএইচপি বিবৃতি রয়েছে:

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

আমরা এখন আমাদের পালানো ব্লেডের বিবৃতিতে এই ফাংশনটি যুক্ত করতে পারি:

{!! html_entity_decode($hello) !!}

এটি এইচটিএমএল সত্তা নেবে &lt;এবং এটিকে এইচটিএমএল কোড হিসাবে পার্স করবে <, কেবল একটি স্ট্রিং নয়।

সত্তার চেয়ে বৃহত্তর ক্ষেত্রে একই প্রযোজ্য &gt;

যে ফলন হবে

হ্যালো

প্রথম স্থানে পালানোর পুরো বিষয়টি হ'ল এক্সএসএস আক্রমণ এড়ানো। সুতরাং এস্কেপ সিনট্যাক্স ব্যবহার করার সময় খুব সতর্কতা অবলম্বন করুন, বিশেষত যদি আপনার অ্যাপ্লিকেশনটিতে ব্যবহারকারীরা এইচটিএমএল নিজেরাই সরবরাহ করে থাকেন তবে তারা নিজেরাই নিজের কোডটি তাদের পছন্দমতো ইনজেক্ট করতে পারে।


2

আপনি যদি ডেটা ব্যবহার থেকে বাঁচতে চান

{{ $html }}

যদি না চান ডেটা ব্যবহার এড়াতে

{!! $html !!}

তবে লারাভেল -৪ অবধি আপনি ব্যবহার করতে পারবেন

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

লারাভেল -৫ এ কখন আসে

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

আপনি পিএইচপি ফাংশন দিয়ে এটিও করতে পারেন

{{ html_entity_decode($data) }}

এই ফাংশনটির পরামিতিগুলির জন্য পিএইচপি ডকুমেন্টের মধ্য দিয়ে যান

html_entity_decode - php.net


2

এটি লারাভেল 5.6 এর জন্য দুর্দান্ত কাজ করে

<?php echo "$text"; ?>

অন্যভাবে

{!! $text !!}

এটি এইচটিএমএল কোড রেন্ডার করবে না এবং স্ট্রিং হিসাবে মুদ্রণ করবে না।

আরও তথ্যের জন্য লিংকটি খুলুন: - ফলক সহ HTML প্রদর্শন করুন


1

টেক্সেরিয়ার মধ্যে টিনেমেস এবং মার্কআপ ব্যবহার করার জন্য:

{{ htmlspecialchars($text) }}

0

আমি সেখানে ছিলাম এবং এটি আমার দোষ ছিল। এবং খুব বোকা।

আপনি যদি ফাইলের নামে .ব্লেড এক্সটেনশনটি ভুলে যান তবে সেই ফাইলটি ব্লেড বোঝে না তবে পিএইচপি কোড চালায়। আপনার ব্যবহার করা উচিত

/resources/views/filename.blade.php

পরিবর্তে

/resources/views/filename.php

আশা করি এটি কিছু সাহায্য করবে



0

আপনি যদি বুটস্ট্র্যাপটি সঙ্কুচিত ক্লাসটি ব্যবহার করেন তবে মাঝে মাঝে {!! $text !!} আমার জন্য কাজ করা হয় না তবে আমার {{ html_entity_decode($text) }}জন্য কাজ করা হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.