【问题标题】:Remove <p>&nbsp;</p> with DOM or regex使用 DOM 或正则表达式删除 <p> </p>
【发布时间】:2011-07-23 17:15:59
【问题描述】:

如何使用 DOM 或正则表达式删除此类型 p 标签&lt;p&gt;&amp;nbsp;&lt;/p&gt;

我也想像这样删除多个p,

<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>

【问题讨论】:

    标签: php html regex domparser


    【解决方案1】:

    如果你想删除一个完全是 '&lt;p&gt;&amp;nbsp;&lt;/p&gt;' 的字符串,最简单和最快的解决方案可能是使用 str_replace()

    $new_string = str_replace('<p>&nbsp;</p>', '', $old_string);
    

    我认为对于这种简单的情况没有必要使用 DOM ——而且这里不需要正则表达式。


    当然,如果你需要替换更复杂的东西,那并不总是完全相同的字符串......好吧,是时候进行 DOM 操作了 ;-)

    【讨论】:

    • 没有正则表达式解决方案总是更快
    • 如果行是固定的,即使是额外的空格也会打破它,即使它不会修改输出。
    • @WooDzu:regex 比简单的 str_replace() 快吗?不太确定。
    • @Cem 是的,如果字符串发生变化,这将不再起作用——这就是为什么我说“完全正确”;-)
    • @WooDzu 哦,好的 ^^ 我现在明白了,感谢您的精确 :-) (我以为你说“不,正则表达式解决方案......”) ;很抱歉造成混乱。
    【解决方案2】:
    preg_replace("|<p>&nbsp;</p>|", "", "<p>&nbsp;</p>
    <p>&nbsp;</p>
    <p>&nbsp;</p>");
    

    【讨论】:

      【解决方案3】:

      如果您想使用 xpath 执行此操作(但您的示例只是要求 str_replace),您可以将 &amp;nbsp 实体作为字符串 (Demo) 进行查询:

      $html = '<body><p>&nbsp;</p>
      <p>&nbsp;</p>
      <p>&nbsp;</p>
      <p>Not empty :)</p>
      </body>';
      
      $dom = new DomDocument();
      $dom->loadhtml($html);
      $xpath = new DomXPath($dom);
      $col = $xpath->query("//p[text()=\"\xC2\xA0\"]"); # &nbsp;
      foreach($col as $e) {
          $e->parentNode->removeChild($e);
      }
      echo $dom->saveXML($dom->getElementsByTagName('body')->item(0));
      

      如果您需要使用 xpath 查询 &amp;nbsp;,希望这会有所帮助。

      另请参阅:Using XPATH to search text containing

      【讨论】:

        猜你喜欢
        • 2013-01-31
        • 1970-01-01
        • 1970-01-01
        • 2018-02-08
        • 2022-07-12
        • 1970-01-01
        • 1970-01-01
        • 2019-02-16
        • 2012-04-21
        相关资源
        最近更新 更多