2013-06-19 103 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")>

然後只是沒有直接的字符串替換的(允許空格)