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

时间:2017-03-13 11:12:31

标签: php regex

我开发了一个简单的 PHP 供稿系统,可以显示所有已登录的用户帖子。它工作正常,但是,我遇到了一个&#34; bug&#34; ,如果用户已经创建了包含前导和/或尾随<br>点的状态,那么&# 39; ll打破状态视图。

现在,在任何人将此标记为重复之前;如果在删除尾随和前导<br>时尝试了以下方法(以及另外两个我无法找到的帖子):

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

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

  3. 但是,他们 a)什么都不做,或 b)可以正常工作,但删除字符串中的所有<br>点,即使他们在中间。

    尝试:

    $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)));
    

    我已经在这方面工作了一段时间,但是没有提出正确的修复。我已接近尝试c ,但是,它会删除所有 <br>点。

    感谢所有帮助,
    谢谢!

2 个答案:

答案 0 :(得分:2)

尝试替换<br />选项包含的内容(请注意nl2br <br />}:

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

演示:https://regex101.com/r/7KDCuA/3

PHP代码:

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

演示:http://codepad.org/BT0A5583

答案 1 :(得分:2)

听起来像我这应该有帮助:

nl2br(escape(trim($post->ctx)));

如果不允许用户输入html作为其状态,这将有效。修剪将删除字符串开头和结尾的所有空格,因此传递给nl2br的字符串在开头和结尾都没有换行符。