PHP preg_replace:从除img之外的所有标签中删除style =“..”

时间:2011-12-01 15:58:46

标签: php regex image preg-replace pcre

PHP preg_replace: remove style=".." from img tags

相反

我试图找到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 :(得分:0)

问题可以用一个简单的否定断言回答:

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

更简单的方法可能是使用(而不是繁琐的DOMDocument):

FORACH htmlqp($html)->find("*")->not("img") EACH $el->removeAttr("style");

答案 1 :(得分:0)

这就像你问过的那样

$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);
}

<强> OUTPUTS

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

答案 2 :(得分:0)

答案 3 :(得分:-1)

一个非常简单的正则表达式可以摆脱它们,而不会过多地使用它们

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

非常简单,有效但