PHP strip_tags除了某些字符

时间:2014-02-10 20:13:43

标签: php html

我在PHP中使用strip_tags来回显数据时删除HTML标记。

我的字符串如下:

<br>
<br>
<br>
<br>
<br>
Test 1, Test2<br>
Test 3,<br>
<br>
<br>
<br>
<br>
<br>
Test 4<br>
Test 5<br>
<br>
Test 6 test 7

如何删除留下大空白的<br>标记,但将<br>标记保留在行间距之间(如Test 1, Test2<br>Test3之间的标记)?

然后删除:

<br>
<br>
<br>
<br>
<br>

所以字符串最终看起来像:

Test 1, Test2<br>
Test 3,<br>
Test 4<br>
Test 5<br>
<br>
Test 6 test 7

1 个答案:

答案 0 :(得分:1)

通过两个步骤完成此操作可能更简洁:

// remove <br> tags
$text = preg_replace('#^(<br[\\s]*(>|\/>)\s*){2,}$#im', '', $text);

// remove empty lines - from http://stackoverflow.com/a/709684/
$text = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", PHP_EOL, $text);

说明 - #^(<br\s*(>|\/>)\s*){2,}$#im

  • ^ - 行锚的开头
  • ( - 第一个捕获组
    • <br - 字面字符<,后跟b,后跟r
    • \s* - 任何空白字符,零次或多次
    • (>|\/>) - 替换 - 匹配<br><br/>
    • \s* - 后跟可选的空格
  • ) - 第一个捕获组的结束
  • {2,} - 匹配前一组,2次或更多次
  • i - 匹配两种情况
  • m - 使模式匹配线分开

输出:

Test 1, Test2<br>
Test 3,<br>Test 4<br>
Test 5<br>
<br>
Test 6 test 7

Demo