改变字符串中的所有图像

时间:2012-04-21 10:51:15

标签: php string

我正在使用此行更改$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中添加内容。

2 个答案:

答案 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