2011-09-30 63 views
1

因爲我不想使用php的stip_tags功能而不是我想將<script> and </script>替換爲空字符串,所以輸出應該是alert(1)。使用php刪除特定的html標籤

輸入: - <script>alert(1)</script>

輸出: - 警報(1)

如何實現它。

回答

0

您總是可以使用strip_tags(),第二個參數包含允許的標籤。

Alternativly,使用...

preg_replace('/<script>(.*)</script>/i', '$1', $input); 

注意,未經測試。

+0

我只是想取代

2

要麼使用一個簡單的替換:

$string = str_replace(array("<script>","</script>"), ""); 

或正則表達式:

$string = preg_replace("/<script.*?>(.*)?<\/script>/im","$1",$string); 
2
echo strip_tags($text, '<p><strong><a>'); 

就說明你不希望在第二個PARAM

+0

不解決問題。將刪除標籤內的節點。該示例顯示剝離標籤,但不顯示內容。 – Samvel

+0

-1根本沒有解決問題。首先,OP說'我不想使用stip_tags「。其次,如果這是剝離整個HTML文件的標籤呢?期望所有可能的html標籤存在的全面清單是完全不合理的。 – Birrel

1

我猜你刪除的那些想要捍衛XSS攻擊,你不應該僅僅爲擔心script標籤,有人可能會這樣利用它:<a href="http://anywhere.com" onClick="alert(1);">test</a>(這是一個非常儘管)。

如果你只想要script標籤,沒有屬性,要過濾:

str_replace(array('<script>', '</script>'), array('', ''), $str); 

你應該使用正則表達式改善這一點;使用preg_match'es和preg_replaces(或只有preg_replaces),您可以匹配和/或替換腳本標記及其屬性。甚至有更多的保護措施抵制XSS。

編輯:或者甚至像/<script>(.+)<\/script>/這樣的正則表達式,然後將括號中的內容存儲到變量中,然後將其打印出來。

+0

不是真的這樣工作!使用正則表達式! – B4NZ41

0

試試這個同志..

$strn = "<script>alert(1)</script>"; 
$ptrn = "=^<script>(.*)</script>$=i"; 

echo preg_match($ptrn, $strn, $mtchs); // 0 means fail to matche and 1 means matches was found! 
var_dump($mtchs); 

結果

1array(2) { 
    [0]=> string(25) "" 
    [1]=> string(8) "alert(1)" 
} 
0

簡單的方法是使用StripTags

轉到StripTags github並通過作曲家下載或安裝。 這個類有一個方法叫only,爲你做到這一點!

use Mimrahe\StripTags\Stripper; 
$stripper = new Stripper(); 
$stripper->text('<a href="#">link</a><p>some paragraph</a>'); 
$stripper->only(['p']); 
echo $stripper->strip(); // prints '<a href="#">link</a>some paragraph'