PHP preg_replace: удалить style = ".." из тегов img - PullRequest
1 голос
/ 29 июля 2011

Я пытаюсь найти выражение для preg_replace, которое удаляет все встроенные стили CSS для изображений. Например, у меня есть этот текст:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. <img style="float:left; margin:0 0 10px 10px;" src="image.jpg" /> Proin vestibulum libero id nisl dignissim eu sodales.

И мне нужно, чтобы это выглядело так:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. <img src="image.jpg" /> Proin vestibulum libero id nisl dignissim eu sodales.

Я пробовал десятки выражений типа

preg_replace("%<img(.*?)style(.*?)=(.*?)(\'|\")(.+?)(\'|\")(.*?)>%i", "<img\$1\$7>", $article->text)

но ничего не получалось. Есть предложения?

Ответы [ 4 ]

7 голосов
/ 29 июля 2011
preg_replace('/(\<img[^>]+)(style\=\"[^\"]+\")([^>]+)(>)/', '${1}${3}${4}', $article->text)

это может помочь

3 голосов
/ 29 июля 2011

Как уже отмечалось, вы должны использовать dom-парсер, в PHP есть один встроенный (два в некоторых случаях), называемый DOMDocument. Вот как вы можете использовать его для своих целей.

$x = new DOMDocument();
    $x->loadHTMLFile("/path/to/html/file/or/file/outputtinghtml.html");
    foreach($x->getElementsByTagName('img') as $img)
    {
    $img->removeAttribute('style');
    }
$x->saveHTMLFile("/file/used/in/loadHTMLFile/function.html");
1 голос
/ 29 июля 2011

Ваш шаблон слишком разрешительный.Поскольку . может соответствовать чему-либо, style(.*?)=(.*?) будет пытаться соответствовать, пока не достигнет чего-то со знаком =, включая все виды вещей, которые вам не нужны.Вы также не используете флаги g или m, которые, я уверен, вы хотите использовать.

Попробуйте что-то вроде этого:

preg_replace("/<img\s([^>]*)style\s*=\s*('|\").*?\2([^>]*)>/igm", "<img $1 $3>", $article->text)

Обратите внимание на ('|")...\2, что позволяет код, подобный style="foo 'bar'".Это вполне возможно в тегах style.

0 голосов
/ 29 июля 2011

Как насчет этого?

preg_replace('/<img style="[^"]*"/', '<img ', $article->text);
...