2012-03-27 64 views
2

我見過這個問題在stackoverflow上問了幾次,沒有令人震驚的精彩答案。 答案似乎總是「不要使用正則表達式」,沒有任何示例的一個更好的選擇。刪除標籤和內容之間使用REGEX/PHP

爲了我的目的,這不會做驗證,但事後剝離。

我需要刪除所有script標籤,包括可能位於它們之間的任何內容。

有關最佳REGEX方法的任何建議嗎?

編輯:預防性響應:我不能使用HTML Purifier,也不能使用PHP的DOMXPath功能。

+2

也許相關http://stackoverflow.com/questions/2505957/using-regex-to-remove-script-tags – 2012-03-27 20:34:58

+0

考慮閱讀這非常受歡迎的線程http://stackoverflow.com/questions/1732348/regex-match -open-tags-except-xhtml-self-contained-tags – Tchoupi 2012-03-27 20:57:39

回答

3

HTML的REGEX被認爲是邪惡的原因是因爲它可以(通常)很容易被破壞,迫使你不斷重新思考你的模式。例如如果你匹配

<script>.+</script> 

它可以很容易地

<script type="text/javascript"> 

如果使用被打破

<script.+/script> 

它也可以很容易地與

< script>... 

這是沒有盡頭的。如果你不能使用你所說的任何方法,你可以嘗試strip_tags,但它需要白名單作爲參數,而不是黑名單,這意味着你需要手動允許每一個你想要允許的標籤。

如果一切都失敗了,你可以求助於正則表達式,我想出了這是

<\s*script.*/script> 

但我敢打賭,有人在這裏也許可以來打破這一點。

+0

謝謝!就像我上面所說的那樣,這不是關於驗證,而是刪除已經存在的代碼。 – kylex 2012-03-28 17:44:35

相關問題