2009-05-22 32 views
4

我在我的一個項目中使用TinyMCE(所見即所得)作爲默認編輯器,有時它會自動添加<p>&nbsp;</p> , <p> </p>或div。正則表達式用於清理空的不必要的HTML標記

我一直在尋找,但我真的找不到用正則表達式清理任何空標籤的好方法。

我試圖使用的代碼,

$pattern = "/<[^\/>]*>([\s]?)*<\/[^>]*>/"; 
$str = preg_replace($pattern, '', $str); 

注:我也想清楚了& nbsp是否太:(

回答

6

嘗試 /<(\w+)>(\s|&nbsp;)*<\/\1>/ 代替:)

+0

那麼您需要更換空白中的第二個參數的preg_replace()? – pix0r 2009-05-22 23:13:36

+0

您可以使用\ 2(或$ 2,我忘記PHP中的語法)在標籤之間插入空格。 – 2009-05-23 09:51:17

1

這一點。正則表達式有點奇怪 - 但看起來像可能工作。你可以試試這個:

$pattern = ':<[^/>]*>\s*</[^>]*>:'; 
$str = preg_replace($pattern, '', $str); 

雖然很相似。

+1

放棄白色空間可能不是一個好主意。你可能不希望「你好世界」成爲「Helloworld」。 – 2009-05-22 22:43:29

0

我知道這不是直接問你的要求,但經過幾個月的TinyMCE,不僅應付這個,而且是來自用戶從Word直接發佈的地獄,我已經切換到FCKeditor,並且不能更快樂。

編輯:以防萬一它不明確,我在說的是,FCKeditor不插入任何部分感覺就像它,再加上應付粘貼的Word廢話開箱。你可能會發現我的previous question有幫助。

0

你會想要多個正則表達式來確保你不會消除其他通用元素。

正如本說,你可能會降低有效的元素,用一個通用的正則表達式

<\s*[^>]*>\s*`&nbsp;`\s*<\s*[^>]*> 
<\s*p\s*>\s*<\s*/p\s*> 
<\s*div\s*>\s*<\s*/div\s*> 
0

試試這個:

<([\w]+)[^>]*?>(\s|&nbsp;)*<\/\1> 
相關問題