0

我正在使用这一行来更改$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(从用户到用户的变量目录更改)/image.jpeg”

我希望它是这样的:“/uploads/userdirs/admin/mcith/mcith_image.jpeg”

类似的问题上,我使用 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 中添加内容。

4

2 回答 2

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
       }
   }
于 2012-04-21T12:22:32.370 回答
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

于 2012-04-21T13:18:24.267 回答