Reputation: 21
Why is that trim()
returns i>abc</i
instead of <i>abc</i>
when using trim($string, "<br />")
on the string below?
$string = " <br /> <br /> <i>abc</i> <br /> <br /> </br>";
I wanted to remove all <br />
tags from the beginning and end of the string considering that there might be some whitespaces in between <br>
tags.
Any suggestions or workarounds?
Upvotes: 0
Views: 221
Reputation: 300825
The second parameter to trim isn't a string as such, more a list of chars you want to strip from the start and end of the string. So, you're telling to strip all leading and trailing <
, >
, \
, b
and r
characters.
Could try something like this regex to strip what you want from the front and end of a string...
//trim from start
$str=preg_replace('{^(?:<br />|</br>|\s+)+}', '', $str);
//trim from end
$str=preg_replace('{(?:<br />|</br>|\s+)+$}', '', $str);
Just to break down that first one...
{}
to delimit my regex, just so I don't need to escape the matches on backslashes which I'd have to if I used the 'normal' //
delimiter^
anchors the match to the start of the string(?: )
is just a group of things we want to look for<br />
, </br>
or any whitespace sequence \s+
- you can see each of these patterns is separated by |
to indicate each is a possible alternative match+
to indicate we want to find one or more matches of that groupThe second one is similar, but anchored to the end of the string with $
Upvotes: 2
Reputation: 174696
I wanted to remove all
<br>
tags from the beginning and end of the string.
preg_replace('~^(?:\s|<br\h*\/>|<\/br>)+|(?:\s|<br\h*\/>|<\/br>)+$~m', '', $string);
\h*
matches zero or more horizontal spaces.
Upvotes: 0
Reputation: 2348
The second parameter of trim()
is a string containing all characters that will be trimmed. Not words or substrings, but characters. It means that <
and >
will be trimmed too, and this is what happens.
What you need to do is either str_replace
the <br />
out before the trim, like str_replace('<br />', '', $string)
, or do a strip_tags($string, '<i>')
that will delete all tags except <i>
Upvotes: 0