在PHP中修剪字符串中的HTML标记

时间:2015-01-18 17:25:28

标签: php regex trim

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

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

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

有任何建议或解决方法吗?

3 个答案:

答案 0 :(得分:2)

trim的第二个参数不是字符串,更多是要从字符串的开头和结尾剥离的字符列表。因此,您要告诉我们删除所有前导和尾随<>\br个字符。

可以尝试使用这个正则表达式来从字符串的前端和末尾剥离你想要的东西......

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

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

  • 我已经使用{}来限制我的正则表达式,所以我不需要在反斜杠上逃脱比赛,如果我使用了&#39;正常&#39; //分隔符
  • ^将匹配锚定到字符串的开头
  • (?: )只是我们想要寻找的一组事情
  • 在组内,我们匹配<br /></br>或任何空格序列\s+ - 您可以看到每个模式都由|分隔,表示每个模式都是+一种可能的替代匹配
  • 该小组之后是$,表示我们要查找该小组的一个或多个匹配项

第二个类似,但是使用{{1}}

锚定到字符串的末尾

答案 1 :(得分:0)

trim()的第二个参数是一个字符串,其中包含将被裁剪的所有字符。不是文字或子字符串,而是字符。这意味着<>也将被修剪,这就是发生的事情。

您需要做的是str_replace <br />在修剪前退出,例如str_replace('<br />', '', $string),或者执行strip_tags($string, '<i>')删除除{{1}之外的所有标记}}

答案 2 :(得分:0)

  

我想从字符串的开头和结尾删除所有<br>标记。

preg_replace('~^(?:\s|<br\h*\/>|<\/br>)+|(?:\s|<br\h*\/>|<\/br>)+$~m', '', $string);

\h*匹配零个或多个水平空格。

DEMO