我正在尝试自动为页面中的所有图像添加宽度和高度,但由于某种原因,它会为图像添加约3倍的宽度和高度,并且它的工作非常努力。从我的测试中getimagesize
函数是加载困难的问题,但是为了重复每个img标记的宽度和高度3次我不能得到它。
REGEX VERSION
$html = file_get_contents('http://www.inspiredhealing.org');
$html = preg_replace( '/(width|height)="\d*"\s/', "", $html );
$html = preg_replace( '/(width)="\d*"\s/', "", $html );
$html = str_replace('width="60"', '', $html);
$img_sources = preg_match_all('/< *img[^>]*src *= *["\']?([^"\']*)/i', $html, $images);
foreach($images[1] as $src) {
$image_size = getimagesize($src);
$html = str_replace($src.'"', $src.'" '.$image_size[3], $html);
}
var_dump($html);
DOM文档版本
$html = file_get_contents('http://www.inspiredhealing.org');
$dom = new domDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($html);
$html = preg_replace( '/(width|height)="\d*"\s/', "", $html );
$html = preg_replace( '/(width)="\d*"\s/', "", $html );
$html = str_replace('width="60"', '', $html);
$dom->preserveWhiteSpace = false;
$images = $dom->getElementsByTagName('img');
$img_sources = array();
foreach ($images as $image) {
if($image->getAttribute('src') !== '') {
array_push($img_sources, $image->getAttribute('src'));
}
}
foreach($img_sources as $src) {
$image_size = getimagesize($src);
var_dump($image_size);
//$html = str_replace($src.'"', $src.'" '.$image_size[3], $html);
}
var_dump($html);
我添加了带有dom文档的版本,但是脚本仍然运行缓慢,并且它在图像中获得了5倍的宽度和高度属性,它确实在数组中我获得了5次相同的链接,但是如何正确添加。数组$img_sources
会像这样:
array(
'fb.png',
'fb.png',
'fb.png'
....
)
所以它广告到相同的标签,但在fb.png的所有实例上都是宽度和高度的5倍,而不是将它添加1次到数组的每个元素。所以问题就在于foreach($img_sources as $src) {
但是如何克服这个问题。