从 PHP 中的字符串修剪 HTML 标签

Trimming HTML tags from string in PHP

为什么在下面的字符串中使用 trim($string, "<br />")trim() returns i>abc</i 而不是 <i>abc</i>

$string = "  <br />   <br /> <i>abc</i>  <br /> <br />   </br>";

考虑到 <br> 标签之间可能有一些空格,我想从字符串的开头和结尾删除所有 <br /> 标签。

有什么建议或解决方法吗?

trim 的第二个参数本身不是字符串,而是您要从字符串的开头和结尾删除的字符列表。因此,您要删除所有前导和尾随 <>\br 字符。

可以尝试像这样的正则表达式来从字符串的前端和末尾删除您想要的内容...

//trim from start
$str=preg_replace('{^(?:<br />|</br>|\s+)+}', '', $str);
//trim from end
$str=preg_replace('{(?:<br />|</br>|\s+)+$}', '', $str);

只是为了打破第一个...

  • 我已经使用 {} 来分隔我的正则表达式,这样我就不需要转义反斜杠上的匹配项,如果我使用 'normal' // 分隔符
  • ^ 将匹配锚定到字符串的开头
  • (?: )就是我们要找的一组东西
  • 在组内,我们匹配 <br /></br> 或任何空白序列 \s+ - 您可以看到这些模式中的每一个都由 | 分隔以指示每个都是可能的替代匹配项
  • 该组后跟 + 表示我们要查找该组的一个或多个匹配项

第二个类似,但锚定在字符串的末尾 $

trim() 的第二个参数是一个包含所有 个字符 的字符串,这些字符将被 trimmed。不是单词或子字符串,而是 个字符 。这意味着 <> 也将被 trimmed,这就是发生的事情。

您需要做的是 str_replace 在 trim 之前输出 <br />,例如 str_replace('<br />', '', $string),或者执行 strip_tags($string, '<i>') 删除除 <i>

之外的所有标签

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* 匹配零个或多个水平空格。

DEMO