2014-02-10 2 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, '') 'do? – Bugs

ответ

1

Вы не можете сделать это с помощью strip_tags. Вы можете использовать регулярное выражение вместо:

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

Этот способ быстрее и гораздо проще, чем простой HTML Dom

+1

Проблема заключается в том, что это заменит тексты, такие как '' и 'words' неправильно. – Anonymous

+0

@ Анонимный юп, вы правы. Но иначе regex становится огромным. И такие ситуации, о которых вы прокомментировали, редки. Но в любом случае, да, я согласен с тобой. – 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);