Reputation: 971
I want to remove HTML tags (all) from a string on laravel blade ...
code
{!! \Illuminate\Support\Str::words($subject->body, 5,'...') !!}
output (example)
<p>hassen zouari</p>
I want it be like this
hassen zouari
Upvotes: 61
Views: 130376
Reputation: 1042
Keep htmlentities, line break, ...
Long code, but that satisfies me in all situations
@php
$txt = nl2br(Str::words(strip_tags($var->txt), 30, '...'));
$txt = preg_replace('/(<br\s*\/?>\s*){2,}/', '<br />', $txt);
@endphp
{!! $txt !!}
Explications
Upvotes: 0
Reputation: 2480
when we used strip_tags, it will not convert the whitespace into space, it will display as HTML like  !; this. How to remove this and the tags too?
{!! Str::limit(strip_tags($subject->body), $limit = 50, $end = '...') !!}
Upvotes: 1
Reputation: 363
PHP 8.1 and from Laravel 9, we can do this:
$taglessBody = strip_tags((string) $subject->body);
Upvotes: 0
Reputation: 130
This will solve your issue
{!! strip_tags( \Illuminate\Support\Str::words($subject->body, 5,'...')) !!}" }}
Upvotes: 3
Reputation: 401
you must know about the diffrence between {{ }}
and {!! !!}
1.1) laravel have predefined you can load variable exact value by using {{$a }}
or
1.2)laravel loading with strip remove {!! $a !!}
please take it seriously this qustion answer its protect your website from cross site scripting excecution.for example if user save his name but he puted script alert.then if you using core php and not handling the strip tags then this script excution when page laod
so i give you some more harmful example 1)like i puted my name as script or in a about section and in script i write some code who get the browser cookies of open website and curl request for saving on my server.
so you understand this whats happen if i got the each user cookies by curl and i just puted a cross script in about filed and its saved in database.
Upvotes: 4
Reputation: 307
Add the below code into your helpers
if (! function_exists('words')) {
/**
* Limit the number of words in a string.
*
* @param string $value
* @param int $words
* @param string $end
* @return string
*/
function words($value, $words = 100, $end = '...')
{
return \Illuminate\Support\Str::words($value, $words, $end);
}
}
& use this in your blade
{{ words($sentence, $limit = 20, $end = ' ..... more') }}
Upvotes: 5
Reputation: 1
use this in your code
$allcms = json_decode(strip_tags(Cms::where('status','active')->get()),true);
return response()->json(['status' => 'success','message' =>'All CMS','data' => $allcms]);
Upvotes: 0
Reputation: 1015
As for me, I use this construction:
{!! str_limit(strip_tags($post->text), $limit = 50, $end = '...') !!}
I hope, my code was helpful for somebody)
Upvotes: 12
Reputation: 163768
Try to use strip_tags()
function:
http://php.net/manual/en/function.strip-tags.php
Update: Try to do something like this in a controller:
$taglessBody = strip_tags($subject->body);
Then pass this variable into a blade template and use it instead of $subject->body
.
Upvotes: 112
Reputation: 5205
You can use strip_tags($yourString); to strip the html tags. In blade you could achieve this by
{{ strip_tags($yourString) }}
//if your string is <h1> my string </h1>
//output will be my string.
hope that is helpful :)
Upvotes: 32