0

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


$pureHTML = htmlspecialchars($dirtyHTML,ENT_QUOTES);

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

我只想为 href 属性允许锚标记对。Onclick,目标属性是不允许的。

4

2 回答 2

2

我不确定您是否可以通过一次替换来获得它,因为您必须匹配并替换 href 周围的“<a”和“>”,同时保持原样。结束的“<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")>

然后只是对转义形式的(允许空格)进行直接字符串替换

于 2013-06-19T06:18:46.393 回答
1

我认为您需要strip-tags()功能。

$pureHTML =  strip_tags($html, '<a>');
于 2013-06-19T05:09:07.540 回答