PHP 替换图片 src 并在包含不同 html 标签的字符串中的图片标签中添加新属性
PHP replace image src and add a new attribute in image tag from a string containing different html tags
我有一个网站,我从数据库中获取产品描述并在 PHP 中像这样解码 html 并将其显示在网页前端:
$data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8');
它 returns html 像下面这样:
<div class="container">
<div class="textleft">
<p>
<span style="font-size:medium">
<strong>Product Name:</strong>
</span>
<br />
<span style="font-size:14px">Some description here <a href="some-link">Click here to see full details.</a></span>
</p>
</div>
<div class="imageblock">
<a href="some-link">
<img src="http://myproject.com/image/catalog/image1.jpg" style="width: 500px; height: 150px;" />
</a>
</div>
<div style="clear:both">
</div>
<div class="container">
<div class="textleft">
<p>
<span style="font-size:medium">
<strong>Product Name:</strong>
</span>
<br />
<span style="font-size:14px">Some description here <a href="some-link">Click here to see full details.</a></span>
</p>
</div>
<div class="imageblock">
<a href="some-link">
<img src="http://myproject.com/image/catalog/image2.jpg" style="width: 500px; height: 150px;" />
</a>
</div>
<div style="clear:both">
</div>
产品描述中可能有很多图片。我在示例中只添加了 2 个。我需要做的是将所有图像的每个图像的 src 替换为 src="image/catalog/blank.gif"
并添加一个新属性
data-src="http://myproject.com/image/catalog/image1.jpg"
图片 1 和
data-src="http://myproject.com/image/catalog/image2.jpg"
对于图片2,data-src属性应该获取每张图片的原始src值。我怎样才能做到这一点?
我试过 preg_replace 喜欢以下
$data['description'] = preg_replace('((\n)?src="\b.*?")', 'src="image/catalog/blank.gif', $data['description']);
它替换了每个图像的 src 属性,但是我如何添加带有原始图像路径的 data-src。我在页面加载之前需要这个,所以有什么办法可以用 PHP?
我认为这可能是您要找的:
http://php.net/manual/en/domdocument.getelementsbytagname.php
$data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8');
$doc = new DOMDocument();
$doc->loadHTML($data['description']);
$tags = $doc->getElementsByTagName('img');
foreach ($tags as $tag) {
$old_src = $tag->getAttribute('src');
$new_src_url = 'image/catalog/blank.gif';
$tag->setAttribute('src', $new_src_url);
$tag->setAttribute('data-src', $old_src);
}
$data['description'] = $doc->saveHTML();
虽然我还没有测试过,所以不要只是复制和粘贴。
只需调整您的正则表达式即可。使用(括号)捕获您想要的文本,然后使用 $1 或 \1.
引用该组 1
preg_replace('(src="(.*?)")', 'src="image/catalog/blank.gif" data-src=""', $data['description']);
我有一个网站,我从数据库中获取产品描述并在 PHP 中像这样解码 html 并将其显示在网页前端:
$data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8');
它 returns html 像下面这样:
<div class="container">
<div class="textleft">
<p>
<span style="font-size:medium">
<strong>Product Name:</strong>
</span>
<br />
<span style="font-size:14px">Some description here <a href="some-link">Click here to see full details.</a></span>
</p>
</div>
<div class="imageblock">
<a href="some-link">
<img src="http://myproject.com/image/catalog/image1.jpg" style="width: 500px; height: 150px;" />
</a>
</div>
<div style="clear:both">
</div>
<div class="container">
<div class="textleft">
<p>
<span style="font-size:medium">
<strong>Product Name:</strong>
</span>
<br />
<span style="font-size:14px">Some description here <a href="some-link">Click here to see full details.</a></span>
</p>
</div>
<div class="imageblock">
<a href="some-link">
<img src="http://myproject.com/image/catalog/image2.jpg" style="width: 500px; height: 150px;" />
</a>
</div>
<div style="clear:both">
</div>
产品描述中可能有很多图片。我在示例中只添加了 2 个。我需要做的是将所有图像的每个图像的 src 替换为 src="image/catalog/blank.gif"
并添加一个新属性
data-src="http://myproject.com/image/catalog/image1.jpg"
图片 1 和
data-src="http://myproject.com/image/catalog/image2.jpg"
对于图片2,data-src属性应该获取每张图片的原始src值。我怎样才能做到这一点? 我试过 preg_replace 喜欢以下
$data['description'] = preg_replace('((\n)?src="\b.*?")', 'src="image/catalog/blank.gif', $data['description']);
它替换了每个图像的 src 属性,但是我如何添加带有原始图像路径的 data-src。我在页面加载之前需要这个,所以有什么办法可以用 PHP?
我认为这可能是您要找的:
http://php.net/manual/en/domdocument.getelementsbytagname.php
$data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8');
$doc = new DOMDocument();
$doc->loadHTML($data['description']);
$tags = $doc->getElementsByTagName('img');
foreach ($tags as $tag) {
$old_src = $tag->getAttribute('src');
$new_src_url = 'image/catalog/blank.gif';
$tag->setAttribute('src', $new_src_url);
$tag->setAttribute('data-src', $old_src);
}
$data['description'] = $doc->saveHTML();
虽然我还没有测试过,所以不要只是复制和粘贴。
只需调整您的正则表达式即可。使用(括号)捕获您想要的文本,然后使用 $1 或 \1.
引用该组 1preg_replace('(src="(.*?)")', 'src="image/catalog/blank.gif" data-src=""', $data['description']);