2013-04-12 23 views
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>地带单端标签

顺便说一句,无法使用strip_tags()

+2

原来什么任务,你在这样一个奇怪的方式解决? – zerkms

+1

它看起来像是罪魁祸首:[^>] +行$ pattern = ...它匹配一个或多个非>字符。如果您将其更改为[^>] *,那么它可能会开始工作。 – doliver

+0

@doliver,这似乎工作,谢谢。我感觉这是'一个或多个'与'零个或多个'的问题。那是不同的,对吗?这是否也解决了您在OregonTrail答案中提到的问题? –

回答

2

您可以使用:

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

原来的答案:

你想摆脱<bork /><bork/>,但不<bork><bork >

它看起来像你想要的是:

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

更新:修复贪婪匹配:

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

。*会比正则表达式贪婪时更多。所以,你可以得到类似,它会匹配像<(tag1> doliver

+0

我想摆脱,你上面给了所有4个例子:'' –

+0

好,用正则表达式更新的应该管用。 – OregonTrail