dongtaijiao7140 2017-03-13 11:12
浏览 36
已采纳

从字符串中删除前导和尾随中断标记

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:

  1. Remove <br>'s from the end of a string

  2. How to trim all leading/trailing
    code using php

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!

  • 写回答

2条回答 默认 最新

  • dounabi6295 2017-03-13 11:41
    关注

    Try to replace with contents optionally wrapped by the <br />'s (note that nl2br inserts <br />):

    ^(?:<br />[
    ]+)*(.*?)(?:<br />[
    ]+)*$
    

    Demo: https://regex101.com/r/7KDCuA/3

    And the PHP code:

    $input = "
    Hello World
    hello world
    
    ";
    $unwrapped = preg_replace("|^(?:<br />[
    ]+)*(.*?)(?:<br />[
    ]+)*$|s", '$1', nl2br($input));
    echo $unwrapped;
    

    Demo: http://codepad.org/BT0A5583

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?