per i posteri (salvo revisioni).. ecco il risultato funzionante!

ho fatto qualche minima modifica, e cambiato i nomi alle variabili per essere un po' più esplicativi per un niubbo come me, ma ovviamente il 99% del merito è di eiyen, thanks a thousand!

Codice PHP:
<?php

$testo_noimg 
"Nel mezzo del cammin di nostra vita {IMG::12::right} mi ritrovai per una selva oscura {IMG::2::left}"// (contiene il template) per esempio con {IMG::25::right} 
$ph_in '{IMG::'// marcatore di fine 
$ph_in_len strlen($ph_in); // lunghezza marcatore di inizio 
$ph_out "}"// marcatore di fine 
$ph_out_len strlen($ph_out); // lunghezza marcatore di fine

echo "

 testo_noimg = " 
$testo_noimg;

while(
$ph_in_pos !== false) {$ph_in_pos strpos($testo_noimg$ph_in); // posizione del placeholder
    
if ($ph_in_pos !== false) { // echo "

 
ph_in_pos " . $ph_in_pos;
        
$ph_in_pos = strpos($testo_noimg$ph_in); // posizione del placeholder
        
$ph_out_pos = strpos($testo_noimg$ph_out); // echo "

 
ph_out_pos " . $ph_out_pos;
        
$ph_lungh = $ph_out_pos-$ph_in_pos; // echo "

 
ph_lungh " . $ph_lungh;
        
$ph = substr ($testo_noimg,$ph_in_pos,$ph_lungh+$ph_out_len); // echo "

 
ph " . $ph;
        
$pars = substr ($testo_noimg,$ph_in_pos+$ph_in_len,$ph_lungh-$ph_in_len); // echo "

 
pars " . $pars;
        list(
$id,$pos) = explode('::',$pars); // echo "

 
id " . $id;    echo "

 
pos " . $pos;
        
$ph_tag = "img_id=$id e img_pos=$pos";
    };
    
$testo_noimg = str_replace($ph,$ph_tag,$testo_noimg); 
};

echo "

 
testo_img " . $testo_noimg;


?>
Eseguendo lo script:

testo_noimg = Nel mezzo del cammin di nostra vita {IMG::12::right} mi ritrovai per una selva oscura {IMG::2::left}

testo_img = Nel mezzo del cammin di nostra vita img_id=122 e img_pos=right mi ritrovai per una selva oscura img_id=2 e img_pos=left