正则表达式用于清除空的,不必要的HTML标记

时间:2009-05-22 22:14:02

标签: php regex replace preg-replace

我在我的一个项目中使用TinyMCE(WYSIWYG)作为默认编辑器,有时会自动添加<p>&nbsp;</p> , <p> </p>或div。

我一直在寻找,但我真的找不到用正则表达式清理任何空标签的好方法。

我尝试使用的代码是,

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

注意:我也想清除&amp; nbsp :(

5 个答案:

答案 0 :(得分:6)

尝试 /<(\w+)>(\s|&nbsp;)*<\/\1>/ 代替。 :)

答案 1 :(得分:1)

那个正则表达式有点奇怪 - 但看起来它可能有效。你可以试试这个:

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

非常相似。

答案 2 :(得分:0)

我知道这并不是你所要求的,但是经过几个月的TinyMCE,不仅要处理这个问题,而且直接从Word发布用户所导致的地狱,我已经切换到FCKeditor并且无法做到更开心。

编辑:以防万一不清楚,我所说的是FCKeditor不会在感觉就好的情况下插入任意的段落,加上开箱即用的粘贴Word垃圾。您可能会发现我的previous question有帮助。

答案 3 :(得分:0)

你会希望多个正则表达式确保你没有用一个通用的元素消除其他想要的元素。

正如Ben所说,你可能会删除一个通用正则表达式的有效元素

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

答案 4 :(得分:0)

试试这个:

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