预替换图像内部样式(_R)


Preg_replace image inner style

可能重复:
用PHP 解析HTML的最佳方法

对于一个网站,我有字符串,但不知道其中会有什么文本或图像行。我想创建一个图像内部样式的替代品。必须移除整个style=""而不知道CCD_ 2之间将是什么风格。

我需要的替换模式是什么。

使用正则表达式是个坏主意,因为HTML解析器会更加健壮。如果样式属性总是相似的,只有微小的变化,那么您可以使用以下方法来更改它:

$yourStyle = 'style="your-style-goes-here"';
$newString = preg_replace('%style="(.*?)"%is', $yourStyle, $string);

如果您只想完全删除样式属性,则设置$yourStyle = '';

同样,这不是实现这一点的最佳方法,但假设样式中间从未有引号,并且样式属性以引号结尾,则这一方法会起作用。

这样的东西应该会有所帮助:

$data = array(
    '<img src="hello/test.png" />',
    '<img src="hello/test.png"/>',
    '<img src="hello/test.png">',
    '<img src="mama" style="blabla; background-color: #98473; border: 1px solid black" border="0" />',
    '<img src="mama" style="blabla; background-color: #98473; border: 1px solid black" border="0"/>',
    '<img src="mama" style="blabla; background-color: #98473; border: 1px solid black" border="0">',
    '<img src="mama" style="blabla; background-color: #98473; border: 1px solid black" />',
    '<img src="mama" style="blabla; background-color: #98473; border: 1px solid black"/>',
    '<img src="mama" style="blabla; background-color: #98473; border: 1px solid black">',
    '<img style="blabla; background-color: #98473; border: 1px solid black" src="mama" />',
    '<img style="blabla; background-color: #98473; border: 1px solid black" src="mama"/>',
    '<img style="blabla; background-color: #98473; border: 1px solid black" src="mama">',
);
foreach($data as $texttosearch){
    echo htmlentities($texttosearch).' => '.htmlentities(preg_replace('/(<img .*?)(style=("|'').*?("|''))(.*?('/?)>)/i', '$1$5', $texttosearch)).'<br />';
}

这应该会有所帮助:

/(?:style=")(?:['w'-':';'s'%'#]+)(?:'")/i

它将从任何标签中剥离大多数样式属性。您可以将其放置在一个函数中,并向其提供要检查/替换的部件