Мое изображение выглядит так:
<img alt="" width="146" height="109" src="http://url.to/src.jpg" style="float:left" />
но я не могу понять, как привести его с помощью preg_replace или preg_replace_callback к этому:
<img alt="" src="http://url.to/src.jpg" style="width:146;height:109;float:left">
Это работает с высотой и шириной, но я не могу добавить элемент стиля «float: left»
$html='<img alt="" width="146" height="109" src="http://url.to/src.jpg" style="float:left" />';
$pattern = ('/<img[^>]*width="(\d+)"\s+height="(\d+)">/');
preg_match($pattern, $html, $matches);
$style = "<img style=\"width:".$matches[1]."px; height:".$matches[2]."px;\"";
$html = preg_replace($pattern, $style, $html);
Результатом этого будет
<img alt="" style="width:146;height:109" src="http://url.to/src.jpg" style="float:left">
который не работал из-за двойного элемента стиля
Попробуйте следующее регулярное выражение
<?php
$html='<img alt="" width="146" height="109" src="http://placehold.it/140x200" style="float:left" />';
$pattern = '/(<img.*)width="(\d+)" height="(\d+)"(.*style=")(.*)" \/(>)/';
$style = '$1$4width:$2px;height:$3px;$5';
$html = preg_replace($pattern, $style, $html);
echo $html; //view source of page to see the code change
?>
Обратите внимание на использование скобок ‘(‘ ‘)’ для создания совпадающих групп, на которые можно впоследствии ссылаться, используя $ 1 $ 2 и т. Д. regex101.com и попробуйте регулярное выражение.
Приведенный выше код приведет к следующему, кроме последней части, это не должно иметь значения, но вы можете изменить его дальше.
<img alt="" src="http://placehold.it/140x200" style="width:146;height:109;float:left" />
Других решений пока нет …