Reputation: 4378
I have developed a simple PHP feed system which displays all of the logged in users posts. It works fine, however, I have come across a "bug" where if the user has made a status which contains leading and/or trailing <br>
points, it'll break the status view.
Now, before anyone marks this as a duplicate; If have tried the following approaches (and two more from posts which I can no longer find) in removing the trailing and leading <br>
's:
However, they a) do nothing at all, or b) do work, but remove all the <br>
points within the string, even if they are in the middle.
Attempts:
$ctx = preg_replace('/^(<br>){0,}|(<br>){0,}$/m', '', nl2br(escape($post->ctx)));
$ctx = preg_replace('/(<br>)+$/', '', nl2br(escape($post->ctx)));
$ctx = preg_replace('#(( ){0,}<br( {0,})(/{0,1})>){1,}$#i', '', nl2br(escape($post->ctx)));
I have been working on this for a little while now, but have come up with no proper fix. I have come close with attempt c, however, it would remove all <br>
points.
All help is appreciated,
Thanks!
Upvotes: 1
Views: 522
Reputation: 9650
Try to replace with contents optionally wrapped by the <br />
's (note that nl2br
inserts <br />
):
^(?:<br />[\n\r]+)*(.*?)(?:<br />[\n\r]+)*$
Demo: https://regex101.com/r/7KDCuA/3
And the PHP code:
$input = "\nHello World\nhello world\n\n";
$unwrapped = preg_replace("|^(?:<br />[\n\r]+)*(.*?)(?:<br />[\n\r]+)*$|s", '$1', nl2br($input));
echo $unwrapped;
Demo: http://codepad.org/BT0A5583
Upvotes: 2
Reputation: 327
sounds to me like this should already help:
nl2br(escape(trim($post->ctx)));
This will work, if the users aren't allowed to enter html for their status. The trim will remove all whitespaces at the beginning and the end of the string and so the string passed to nl2br has no line breaks at the beginning and at the end.
Upvotes: 2