0
function stripSingleEndedTag($content, $allowed = array()){
(array)$allowed;
$singletags = array('<meta>','<img>','<input>','<hr>','<br>','<link>','<isindex>','<base>','<meta>','<nextid>','<bork>');

$stripthese = arrayfilterout ($singletags, $allowed);
$stripthese = str_replace(array('<','>'),'',$stripthese);

$pattern = '/<('. implode('|', $stripthese) .')[^>]+\>/i'; 

$content = preg_replace($pattern, "", $content);
return $content;
}

我在这里得到的将去掉一个单尾标签,<bork />但前提是在“bork”之后和“>”之前有一些字符。 <bork >并被<bork/>剥离,但不是<bork>

顺便说一句,不能使用strip_tags()

4

1 回答 1

2

您可以使用:

$pattern = '/\<('. implode('|', $stripthese) .')[^>]*\>/i';

原答案:

你想摆脱<bork />and <bork/>,而不是<bork>and<bork >吗?

看起来你想要的是:

$pattern = '/<('. implode('|', $stripthese) .').*\\\>/i';

更新:修复贪婪匹配:

$pattern = '/<('. implode('|', $stripthese) .').*?\\\>/i';
$pattern = '/<('. implode('|', $stripthese) .')[^>]*\\\>/i';
于 2013-04-12T03:50:28.503 回答