我有一个带有许多图像的文本(html代码),例如:
<img src="X" attributes />
我需要将 src 值替换为唯一标识,例如 CID:#,其中#是该唯一值。我不知道src值是否会全部不同,也许其中一些可以相等。
下面是带有正则表达式以匹配图像的代码。现在,如何进行替换?
PS:我需要将创建的唯一代码与被替换的字符串之间的关系存储在数组中。例如,我需要知道345 id是相对于URL“ img / xxx.jpg”的。
preg_match_all('/<img src=[",\']([^>,^\',^"]*)[",\']([^>]*)/', $html, $matches);
$url_image = array();
$attr_image = array();
$cid = array();
foreach ($matches[1] as $i => $img){
$url_image[$i] = $matches[2][$i];
$attr_image[$i] = $matches[3][$i];
//How to replace the src value with the value of $cid?
$cid[$contador] = "CID:".date('YmdHms').'.'.time().$i;
}
答案 0 :(得分:0)
通常使用a very bad idea来修改带有正则表达式的HTML / XML。纠正几乎是不可能的,以后往往会产生令人不快的意外副作用。
使用Tidy extension和DOMDocument之类的东西来解析结果并执行所需的属性替换会更好。
答案 1 :(得分:0)
以下是使用的解决方案:
preg_match_all('/<img src=[",\']([^>,^\',^"]*)[",\']([^>]*)/', $html, $matches);
$url_image = array();
$attr_image = array();
$cid = array();
foreach ($matches[1] as $i => $img){
$url_image[$i] = $matches[1][$i];
$attr_image[$i] = $matches[2][$i];
$cid[$i] = "CID:".date('YmdHms').'.'.time().$i;
$tag_img = str_replace("/", "\/", $img);
//Replace each specific occurrence
$html = preg_replace('/'.$tag_img.'/', $cid[$i], $html, 1);
}