PHP preg_replace: удалить style = «..» из всех тегов, кроме img - PullRequest
1 голос
/ 01 декабря 2011

Это обратное: PHP preg_replace: remove style = ".." из тегов img

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

<img attribut="value" style="myCustom" attribut='value' style='myCustom' /> <input attribut="value" style="myCustom" attribut='value' style='myCustom'> <span attribut="value" style="myCustom" attribut='value' style='myCustom'> style= </span>

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

<img attribut="value" style="myCustom" attribut='value' style='myCustom' /> <input attribut="value" "myCustom" attribut='value' 'myCustom'> <span attribut="value" "myCustom" attribut='value' 'myCustom'> style= </span>

или примерно так:

<img attribut="value" style="myCustom" attribut='value' style='myCustom' /> <input attribut="value" attribut='value'> <span attribut="value" attribut='value'> style= </span>

Это можетвыглядит так

preg_replace('/(\<img[^>]+)(style\=\"[^\"]+\")([^>]+)(>)/', '${1}${3}${4}', $article->text)

Ответы [ 4 ]

0 голосов
/ 20 января 2012

Оформить заказ:

http://blacksmoke.plutohost.net/isr/

0 голосов
/ 01 декабря 2011

На вопрос можно ответить простым отрицательным утверждением:

preg_replace('/(<(?!img)\w+[^>]+)(style="[^"]+")([^>]*)(>)/', '${1}${3}${4}', $article->text)

И более простой подход мог бы использовать (а не сложный DOMDocument):

FORACH htmlqp($html)->find("*")->not("img") EACH $el->removeAttr("style");
0 голосов
/ 01 декабря 2011

Это так, как вы просили

$string = '<img attribut="value" style="myCustom" attribut=\'value\' style=\'myCustom\' /> <input attribut="value" style="myCustom" attribut=\'value\' style=\'myCustom\'> <span attribut="value" style="myCustom" attribut=\'value\' style=\'myCustom\'> style= </span>';

preg_match_all('/\<img.+?\/>/', $string, $images);

foreach ($images[0] as $i => $image) {    
    $string = str_replace($image,'--image'.$i.'--', $string);
}

$string = preg_replace(array('/style=[\'\"].+?[\'\"]/','/style=/'), '', $string);

foreach ($images[0] as $i => $image) {
    $string = str_replace('--image'.$i.'--',$image, $string);
}

ВЫХОДЫ

<img attribut="value" style="myCustom" attribut='value' style='myCustom' /> <input attribut="value"  attribut='value' > <span attribut="value"  attribut='value' >  </span>
0 голосов
/ 01 декабря 2011

Очень простое регулярное выражение, чтобы избавиться от них, не вдаваясь в подробности, будет

preg_replace( '/style="(.*)"/', 'REPLACEMENT' )

Очень просто, хотя достаточно эффективно

...