我需要找到<a></a>
内的所有图片并为其添加ID。它必须仅应用于<a href..></a>
内的图像,而不应用于内容中的所有图像。
我尝试使用preg_replace但没有成功。这是PHP
$content = preg_replace(array('{<a[^>]*><img}'), array(' *add ID to every match *'), $content);
感谢您的帮助 的Jakub
答案 0 :(得分:0)
你的问题并不是那么清楚,所以我在这里做了一些假设,但是如下所示呢?它使用图像的文件名来生成ID。
此外,我有点睡眠不足,所以我不保证这会在每种情况下都有效,等等。但是,它适用于我的简单例子,所以也许这是一个不错的起点。
<?php
$test = '
<a href="#"><img src="example-1.png" /></a>
<a href="#"><img src="example-2.png" /></a>
<img src="example-3.png" />
<img src="example-4.png" />
';
$out = preg_replace_callback(
'|(<a.+?>)<img src="(.+?)\.(.{3})|',
function ($matches) {
return $matches[1].'<img id="'.$matches[2].'" src="'.$matches[2].'.'.$matches[3];
},
$test
);
echo $test;
echo $out;
?>
给出了:
<a href="#"><img src="example-1.png" /></a>
<a href="#"><img src="example-2.png" /></a>
<img src="example-3.png" />
<img src="example-4.png" />
<a href="#"><img id="example-1" src="example-1.png" /></a>
<a href="#"><img id="example-2" src="example-2.png" /></a>
<img src="example-3.png" />
<img src="example-4.png" />
编辑:作为一个小注释,您可能希望在使用之前对生成的ID执行某些操作,例如,可以用/
替换所有-
个字符。我试图保持简单,关于找到正确的图像并在这里添加一个合理的ID,所以我没有进入那个。您的“真实”脚本可能应该。此外,具有相同路径和名称的两个图像将与此脚本具有相同的ID,这将是一个问题。我只为它替换的每一个保留一个计数器,如果它再次找到相同的结果ID,则在末尾添加一个数字(因此example
变为example1
或其他)。再说一次,你没有说明你是如何决定使用什么ID的,所以我只是保持简单。