如何使用 php 删除带有空文本节点的标签?

How can I use php to remove tags with empty text node?(如何使用 php 删除带有空文本节点的标签?)
本文介绍了如何使用 php 删除带有空文本节点的标签?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用 php 去除带有空文本节点的标签?

How can I use php to remove tags with empty text node?

例如,

<div class="box"></div>删除

<a href="#"></a> 删除

<p><a href="#"></a></p>删除

<span style="..."></span> 移除

但我想像这样保留带有文本节点的标签,

But I want to keep the tag with text node like this,

<a href="#">link</a>保持

我也想把这种乱七八糟的东西去掉,

I want to remove something messy like this too,

<p><strong><a href="http://xx.org.uk/dartmoor-arts"></a></strong></p>
<p><strong><a href="http://xx.org.uk/depw"></a></strong></p>
<p><strong><a href="http://xx.org.uk/devon-guild-of-craftsmen"></a></strong></p>

我测试了下面的两个正则表达式,

I tested both regex below,

$content = preg_replace('!<(.*?)[^>]*>s*</1>!','',$content);
$content = preg_replace('%<(.*?)[^>]*>\s*</\1>%', '', $content);

但他们会留下这样的东西,

But they leave something like this,

<p><strong></strong></p>
<p><strong></strong></p>
<p><strong></strong></p>

推荐答案

一种方法可能是:

$dom = new DOMDocument();
$dom->loadHtml(
    '<p><strong><a href="http://xx.org.uk/dartmoor-arts">test</a></strong></p>
    <p><strong><a href="http://xx.org.uk/depw"></a></strong></p>
    <p><strong><a href="http://xx.org.uk/devon-guild-of-craftsmen"></a></strong></p>'
);

$xpath = new DOMXPath($dom);

while(($nodeList = $xpath->query('//*[not(text()) and not(node())]')) && $nodeList->length > 0) {
    foreach ($nodeList as $node) {
        $node->parentNode->removeChild($node);
    }
}

echo $dom->saveHtml();

您可能需要根据自己的需要进行一些更改.

Probably you'll have to change that a bit for your needs.

这篇关于如何使用 php 删除带有空文本节点的标签?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Convert JSON integers and floats to strings(将JSON整数和浮点数转换为字符串)
in php how do I use preg replace to turn a url into a tinyurl(在php中,如何使用preg替换将URL转换为TinyURL)
all day appointment for ics calendar file wont work(ICS日历文件的全天约会不起作用)
trim function is giving unexpected values php(Trim函数提供了意外的值php)
Basic PDO connection to MySQL(到MySQL的基本PDO连接)
PHP number_format returns 1.00(Php number_Format返回1.00)