RafDias
RafDias

Reputation: 21

Trimming HTML tags from string in PHP

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

Answers (3)

Paul Dixon
Paul Dixon

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...

  • I've used {} 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
  • inside the group, we match either <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
  • the group is followed by + to indicate we want to find one or more matches of that group

The second one is similar, but anchored to the end of the string with $

Upvotes: 2

Avinash Raj
Avinash Raj

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.

DEMO

Upvotes: 0

Oleg Dubas
Oleg Dubas

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

Related Questions