2010-04-16 35 views
0

這個問題是關係到一個類似的案件,即Removing inline styles using php去除大部分內嵌樣式和屬性與PHP

該解決方案有不刪除即:<font face="Tahoma" size="4">

但是,讓我們說,我有內聯樣式喜憂參半和屬性,如下所示:

<ul style="padding: 5px; margin: 5px;"> 
    <li style="padding: 2px;"><div style="border:2px solid green;">Some text</div></li> 
    <li style="padding: 2px;"><font face="arial,helvetica,sans-serif" size="2">Some text</font></li> 
    <li style="padding: 2px;"><font face="arial,helvetica,sans-serif" size="2">Some text</font></li> 
</ul> 

需要什麼regExp才能實現此結果?

<ul> 
    <li><div>Some text</div></li> 
    <li><font>Some text</font></li> 
    <li><font>Some text</font></li> 
</ul> 

回答

5

像往常一樣,正則表達式不理想的解析HTML;用實際的HTML解析器很可能會更好。

也就是說......

$noattributes = preg_replace('/<(\w+) [^>]+>/', '<$1>', $original); 

...將替換包含帶有相應標籤的屬性W/O屬性的任何開放標籤。然而,它也可能意外地擊中了包含在其他標籤的引用屬性中的「標籤」(並且因此不實際標記它們自己)。它也會導致自閉標籤問題(它會替代<br /><br>) - 儘管如果自閉標籤在標籤名稱和斜槓之間沒有空格,可以避免這種情況。

+0

像這樣? $ formatted = preg_replace('<(\w+) [^>] +>,'<$1>',$ text); – Coreus 2010-04-16 14:04:22

+0

查看我編輯的版本;你必須記住分隔正則表達式。 – Amber 2010-04-16 14:04:53

+0

我同意,使用HTML解析更好 – TravisO 2010-04-16 14:19:44