2014-02-10 150 views
3

是否可以通过strip_tags去除链接到图像上的标签?strip_tags - Strip <a>标签<img>

比如我想

<a href=""><img src="" /></a> 

<img src="" /> 

我需要保持形象,并删除所有标签一个是他们身边。除了使用Simple HTML Dom我希望有这样做

+0

是,使用普通的'DOM' ......这将是令人眼花缭乱的快速,如果你已经习惯了simpleHTMLDom。 – Wrikken

+0

我发现这个线程,我认为应该处理您的问题:http://stackoverflow.com/questions/8684395/strip-outer-element-ie-remove-parent-with-php-parser – steinmas

+0

不会'strip_tags($ str,'')'是吗? – Bugs

回答

1

使用strip_tags的你不能做到这一点。您可以使用正则表达式来代替:

$text = preg_replace("/<a[^>]+\>(<img[^>]+\>)<\/a>/i", '$1', $text); 

这种方式速度更快,比简单的HTML更容易大教堂

+1

问题是,这会错误地替换文本,例如''和'words'。 – Anonymous

+0

@匿名,你说得对。但否则正则表达式变得巨大。你所评论的这种情况很少见。但无论如何,是的,我同意你的看法。 – Hast

0

您可以使用正则表达式来做到这一点更简单的方法:

$string = '<a href=""><img src="" /></a>'; 
$string = preg_replace('/(<a(?: [^>]+| |)>)(?:[^<]+|)<img(?: [^>]+| |)>(?:[^<]+|)(<\/a>)/','$1$2',$string); 

这应该链接内更换什么,如果有一个从内内它的<img>标签只要链接之间没有其他标签,链接声明。

如果你想只能更换相同的情况下的<img>标签部分,你可以使用:

$string = '<a href=""><img src="" /></a>'; 
$string = preg_replace('/(<a(?: [^>]+| |)>)([^<]+|)<img(?: [^>]+| |)>([^<]+|)(<\/a>)/','$1$2$3$4',$string);