PHP Regex从PHP中的字符串中完全删除HTML Anchor链接

时间:2016-09-24 06:40:59

标签: php html regex

我在PHP中有一个HTML字符串。它可能有几个这样的锚标签

.....<p><span>qwerty</span></p>...qwerty....<a href="www.xyz.com">xyz</a>qwerty...<a href="www.xyz.com"><p><span>xyz</span></p></a>qwerty.....

<a>标记可能包含其他几个HTML标记,例如<p>,<span> <br>等。

我想要一个正则表达式删除<a>标记内的所有内容,包括<a>标记,即删除所有锚标记以及锚标记内的所有数据

输出应为:<p><span>qwerty</span></p>....qwerty....qwerty....qwerty....

请注意,最终输出中没有xyz。

由于

P / s:String可能包含未嵌入Anchor标记的其他HTML标记。我想保留它们。让我们说字符串可能包含p,span,div,strong等标签。只应删除标签。我需要正则表达式。

2 个答案:

答案 0 :(得分:2)

您不需要任何正则表达式,只需使用strip_tags function从输入中删除HTML标记:

$s = '.....qwerty....<a href="www.xyz.com">xyz</a>qwerty...<a href="www.xyz.com"><p><span>xyz</span></p></a>qwerty.....';

echo strip_tags($s);

//=> .....qwerty....xyzqwerty...xyzqwerty.....

基于已修改的问题:您可以将某些代码列入白名单以允许其输入:

$s = '.....<p><span>qwerty</span></p>...qwerty....<a href="www.xyz.com">xyz</a>qwerty...<a href="www.xyz.com"><p><span>xyz</span></p></a>qwerty.....';

echo strip_tags($s, '<p><span>');
//=> .....<p><span>qwerty</span></p>...qwerty....xyzqwerty...<p><span>xyz</span></p>qwerty.....

使用正则表达式进行HTML解析的所有陷阱都可以与OP一起使用:

echo preg_replace('~<a [^>]*>.*?</a>~', '', $s);
//=> .....<p><span>qwerty</span></p>...qwerty....qwerty...qwerty.....

答案 1 :(得分:0)

您可以使用DOMDocument而不是正则表达式来实现所需的结果

function removeanchors( $strhtml ){
    $dom=new DOMDocument;
    $dom->loadHTML( $strhtml );
    $col=$dom->getElementsByTagName('a');

    /* need to work backwards through collection of nodes! */
    for ( $i = $col->length; --$i >= 0; ) {
      $a = $col->item( $i );
      $a->parentNode->removeChild( $a );
    }

    return $dom->saveHTML();
}

$strhtml='.....qwerty....<a href="www.xyz.com">xyz</a>qwerty...<a href="www.xyz.com"><p><span>xyz</span></p></a>qwerty.....womble<a href="www.xyz.com"><p><span>xyz</span></p></a> ..... badger <a href="www.xyz.com"><p><span>xyz</span></p></a>';

echo removeanchors( $strhtml );