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

これはあなたが必要とするものですか?

<?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 に答える
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 に答える