2009-05-22 35 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> 
相关问题