2012-08-22 72 views
0

我在我的UI中有一個文本區域,我想過濾掉用戶使用preg_replace輸入的所有xml(包括html)文本。我需要一些幫助。PHP Preg取代所有xml

如:

Emailed user sam at 12:15 PM 
<details><email>[email protected]</email></details> 

的preg_replace後:

Emailed user sam at 12:15 PM 

隨着這個任何指針的preg_replace正則表達式將是巨大的。我試着在preg_replace中使用一些java正則表達式(我是PHP的新手),發現它不起作用。我不確定我的正則表達式是否錯誤,或者preg_replace使用不同類型的正則表達式。

所有的幫助都非常感謝。

+0

顯示你到目前爲止試過的東西 –

+0

什麼'strip_tags()'有錯? –

+0

它不會過濾XML標籤 – raidenace

回答

0

mixed preg_replace (mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]])

因此,像下面將在大多數情況下,

$str_out = preg_repace('/<[\/]{0,1}\w[^>]*>/g', '', $str_in); 

哪裏'/<[\/]{0,1}\w[^>]*>/g'是正則表達式<名字的東西>和< /名稱的東西>。如果你在一個屬性已經一個>它會失敗(即<name blah=">hello">將導致hello">

雖然strip_tags原產這樣會更快記住論據strip_tags是事情不剝離


編輯:如果您希望標籤之間的內容也被去掉,那麼正則表達式爲 '/<\w[^>]*>[\s\S]*?<\/\w[^>]*>/g',但是在更多情況下(即嚴重關閉/嵌套標籤),這會失敗,所以您可能想首先運行它,然後結果如上

+0

此外,如果要確保人們不提交不良內容,請在while循環中執行此操作,直到它停止進行更改,以確保人們不會執行期望刪除的字符串位創建新標記的奇怪事情,即< mytag> –