2012-04-09 33 views
-1

可能重複:
replace ereg_replace with preg_replace轉換ereg_replace到的preg_replace在PHP

我已經升級到PHP 5.3,我需要知道如何將這些標籤轉換成的preg_replace。

任何想法?

$html = ereg_replace("<(/)?(font|span|del|ins)[^>]*>", "", $html); 

// then run another pass over the html (twice), removing unwanted attributes  
$html = ereg_replace("<([^>]*)(class|lang|style|size|face)=(\"[^\"]*\"|'[^']*'|[^>]+)([^>]*)>", "<\\1>", $html); 
$html = ereg_replace("<([^>]*)(class|lang|style|size|face)=(\"[^\"]*\"|'[^']*'|[^>]+)([^>]*)>", "<\\1>", $html); 

回答

1

它應該是一樣的,你只需要添加分隔符(可能是「/」,「〜」奧得「@」,你喜歡什麼最沒有「)。在replacementstring你必須用「$ 1」而不是「\ 1」

它應該是這樣的:

$html = preg_replace("~<(/)?(font|span|del|ins)[^>]*>~","",$html); 

$html = preg_replace("~<([^>]*)(class|lang|style|size|face)=(\"[^\"]*\"|'[^']*'|[^>]+)([^>]*)>~", "<$1>", $html); 

/編輯:您可以在分隔符後加「I」(不帶「),因爲標籤可能在被寫入大寫字母,「我」是一個修飾語,代表「無情感」。

$html = preg_replace("~<(/)?(font|span|del|ins)[^>]*>~i","",$html); 

$html = preg_replace("~<([^>]*)(class|lang|style|size|face)=(\"[^\"]*\"|'[^']*'|[^>]+)([^>]*)>~i", "<$1>", $html); 

東西題外話:在HTML4你可能有這樣的事情:

<tagname name="<"> 

這意味着由沒有「<」或「>」過濾一切,你的正則表達式不會觸發這些標籤!但它相當罕見。