這裏是我的問題:PHP的:刪除所有的標籤,但「A HREF」文本
我有一個文本,用戶可以輸入任何他想要的。
當他把這個文本(POST方法),在服務器端,我不過濾它在所有寫入到數據庫之前(因爲我想保持「完整」,用戶輸入的內容(也許它可以用作他試圖破解的證據或任何))。
然後輸出它之前,我用這個函數:
public function textForWeb($texte,$br=true)
{
if ($br) {
return
mb_ereg_replace("((\r)?\n)", "<br />",
htmlentities(
stripslashes($texte),
ENT_QUOTES, 'UTF-8'
)
);
}
else {
return
htmlentities(
stripslashes($texte),
ENT_QUOTES, 'UTF-8'
);
}
}
所以文本正確過濾,並保持UTF-8
編碼。
但問題是,我想所有這些文字:<a href="http://url">xxx</a>
被不變。即當我將顯示它時,鏈接(只鏈接「http://
」和沒有JavaScript裏面的)將是「可點擊」。
例如,您可以看到它現在如何顯示here。看到通告的最後一行?我希望鏈接到網站是「可點擊」的。
你會怎麼做?
爲什麼不使用strip_tags()?這並不解決JavaScript喜歡,但仍然是一個單一的功能。在strip標籤tou之後,可以刪除所有href屬性。用正則表達式可能。 – Kristian 2012-01-18 11:05:25
是的,但是如果只刪除'href =「(?! http)'那麼它就不是那麼糟糕了,它可能會破壞語法,但是對於那個鏈接來說,olny可能並不會超出這個正則表達式。 – Kristian 2012-01-18 11:11:25
我需要它將''標籤中的所有內容轉換爲實體,並正確地過濾掉''標籤,以便我可以確定它只是一個有效的URL(=否'JavaScript') – 2012-01-18 11:17:53