2013-06-19 105 views
0

使用htmlspecialchars但允许<a href="URL">...</a>
额外的空格也应该是有效的,如< a href =使用htmlspecialchars但允许<a href="URL">...</a>


$pureHTML = htmlspecialchars($dirtyHTML,ENT_QUOTES); 

现在也许我需要一个$pureHTMLpreg_replace,但应该是什么preg_replace?或者你推荐使用HTML Purifier

我想只允许anchor标签对用于href属性。 Onclick,目标属性是不允许的。

+0

多一点信息逃脱形式的...或词将是有益的 – brendosthoughts

+0

您需要使用正则表达式 –

+0

您尚未正确构建您的问题。 –

回答

2

我不知道,你可以在一个得到这个代替,你将不得不匹配和替换“<一个”和“>”周围的HREF,同时保持它的完整。结束“<a>”是一个容易替代的想法。可能有办法做到这一切在一个单一的preg_replace,但我不够精通正则表达式来做到这一点..反正我会做

$pureHTML = htmlspecialchars($dirtyHTML, ENT_NOQUOTES); 
preg_match_all('/(&lt;\s*a)\s*(\w+="[\w:\/@#%_\-&\.]+")\s*(&gt;)/i', $pureHTML, $matches, PREG_SET_ORDER); 
foreach($matches as $match) { 
    $pureHTML = str_replace($match[0], "<a " . $match[2] . ">", $pureHTML); 
} 
$pureHTML = preg_replace('/(&lt;\/\s*a\s*&gt;)/i', '</a>', $pureHTML); 

基本上,它的(<a)(href="url")(>)逃脱的形式相匹配,使用于每个部件之间的空间(“<”和“a”之间的空格)。然后,它取代了原来的匹配文字<a(href="url")>

然后只是没有直接的字符串替换的(允许空格)