1

我有通过 Wordpress 输出的内容,它<p>在内容周围包裹了段落标签。我需要删除第一个<p></p>.. 中的内容。我该怎么做?

例如,输出为:

<p>Posted by Bob</p>
<p>This is the content here</p>
<p>This is the second paragraph</p>

我想删除该行<p>Posted by Bob</p>并留下其余部分。

4

2 回答 2

2

通常,您不应使用 regex 解析 HTML

在这种情况下,正则表达式解决方案可能工作正常:

$str = preg_replace('~<p>.*?</p>~s', '', $str, 1);

重要的是

  • ?使得不.*贪婪(以便它尽快停止并且不会持续到最后</p>
  • 修饰符s,以便.能够匹配换行符
  • 限制1,以便仅删除第一个匹配项

如果您只想删除标记的内容(因此如果您想保留一个空段落),只需将<p></p>其用作替换字符串。

但是,正如我所说,这仍然不是一个完美的解决方案。想想<p>评论中的<p>标签,或者具有属性甚至无效 HTML 的标签。PHP 带有一个DOM 解析器。如果你可以使用 3rd-party 库,还有这个,它使用起来非常方便,并且使问题几乎变得微不足道:

require "simple_html_dom.php";

$html = new simple_html_dom($input);
$html->load($input);

$html->find('p', 0)->outertext = "";

$output = $html->save();

同样,如果您只想清空标签但保留它,请替换outertextinnertext.

于 2012-11-07T09:41:43.703 回答
0

如果您有权访问 jQuery,则可以使用以下内容:

$("p:first-child").text("Hello World!");

要在 WordPress 中包含 jQuery,请在您的<head></head>:

<?php wp_enqueue_script("jquery"); ?>
<?php wp_head(); ?>

这以安全的方式包括 jQuery,并防止与其他 jQuery 实例或其他库发生任何冲突。

于 2012-11-07T09:40:44.807 回答