【问题标题】:Regexp for cleaning the empty, unnecessary HTML tags用于清理空的、不必要的 HTML 标记的正则表达式
【发布时间】:2010-10-28 08:44:59
【问题描述】:

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

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

我尝试使用的代码是,

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

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

【问题讨论】:

    标签: php regex replace preg-replace


    【解决方案1】:

    试试这个:

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

    【讨论】:

      【解决方案2】:

      您可能需要多个正则表达式来确保您不会用一个通用的元素来消除其他想要的元素。

      正如 Ben 所说,您可以使用一个通用正则表达式删除有效元素

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

      【讨论】:

      • 不需要多个正则表达式,您只需执行 /(\s| )*/ 即可。适当添加标签名称。
      【解决方案3】:

      我知道这不是您直接要求的,但是在使用了几个月的 TinyMCE 之后,不仅要应对这个问题,还要应对用户直接从 Word 发帖导致的地狱,我已经切换到 FCKeditor 并且无法更快乐。

      编辑:以防万一不清楚,我的意思是 FCKeditor 不会在感觉像的地方插入任意段落,并且可以处理开箱即用的粘贴 Word 废话。您可能会发现我的previous question 会有所帮助。

      【讨论】:

        【解决方案4】:

        试试 /&lt;(\w+)&gt;(\s|&amp;nbsp;)*&lt;\/\1&gt;/ 反而。 :)

        【讨论】:

        • 你会替换 preg_replace() 的第二个参数中的空格吗?
        • 您可以使用 \2(或 $2,我忘记 PHP 中的语法)在标签之间插入空格。
        【解决方案5】:

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

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

        虽然非常相似。

        【讨论】:

        • 删除空白可能不是一个好主意。您可能不希望“Hello world”变成“Helloworld”。
        猜你喜欢
        • 2017-06-19
        • 1970-01-01
        • 2011-05-26
        • 1970-01-01
        • 1970-01-01
        • 2014-01-29
        • 2019-10-16
        • 1970-01-01
        • 2011-01-15
        相关资源
        最近更新 更多