我正在使用此行更改$comments
字符串中的所有图片:
$comments = preg_replace("{<img\\s*(.*?)src=('.*?'|\".*?\"|[^\\s]+)(.*?)\\s*/?>}ims", '<a class ="gallery"rel="'.$pagelink.'"href=$2><img $1src=$2 $3 name= $2 $3 /></a>', $comments);
这就像一个魅力,它包裹在<a>
中并添加了一些东西。现在我需要改变src路径。
我想为字符串中的每个图片添加"mcith/mcith_"
。我看了一下dom功能,但这似乎并没有真正起作用。
图像路径如下所示:“/ uploads / userdirs / admin(变量dir从用户更改为用户)/image.jpeg”
我希望它是这样的:“/ uploads / userdirs / admin / mcith / mcith_image.jpeg”
在similar question我使用pathinfo得到答案,所以我尝试这样做:
if (preg_match('/<img.+src=[\'"](?P<src>.+?)[\'"].*>/i', $comments, $image) ) {
$imagedir = $image['src'];
$pathchange = pathinfo($imagedir);
$comments = $pathchange['dirname'] . '/mcith/mcith_' . $pathchange['basename'];
}
但这并不像我想要的那样,因为它会弄乱我的整个字符串,文本和所有。 我认为解决方案在preg_replace行中,但无法弄清楚如何在该行的src中添加内容。
答案 0 :(得分:1)
尝试此解决方案......希望这会对您有所帮助
if(preg_match_all('/(<img[^>]*>)/Ui', $comments, $match, PREG_OFFSET_CAPTURE)){ //loop through all img tags
$shiftOffset = 0;
for($i=0; $i<count($match[1]); $i++){ //loop to execute no.of times img tag found
if($i){ // do not change offset for single or first occurence
$shiftOffset += substr_count($match[1][$i-1][0], "<img "); //count the img tag
$match[1][$i][1] += $shiftOffset;
}
$sub = "form your new img src that is to replaced for old img src";
$comments = str_replace($match[1][$i][0],$sub,$comments); //change the original img tag with our img tag
}
}
答案 1 :(得分:1)
这是你需要的吗?
<?php
$comment = '<img src="/uploads/userdirs/admin-something/image.jpeg" />
<div>text</div>
<img src="/uploads/userdirs/admin-another/coffee.png" />
';
$comment = preg_replace('@(<img.+src=[\'"]/uploads/userdirs/admin)(?:.*?/)(.+?)\.(.+?)([\'"].*?>)@i', '$1/mcith/mcith_$2.$3$4', $comment);
echo $comment;
看看它是否有帮助。在线试用:http://codepad.org/TT9rH6IX