Ciao,
ho fatto quello che mi hai suggerito e sono riuscito a risolvere il problema. Posto la parte centrale della funzione:

codice:
preg_match_all("#($to_find)#", $str_toChange, $arr_toChange, PREG_OFFSET_CAPTURE);
			
				foreach($arr_toChange[0] as $value){
					
					foreach($value as $value2){
						
						if(is_int($value2)){
							
							$str_covered = substr_replace($str_covered,$to_find,$value2,strlen($to_find)); 
						}
			
					}
				}
Quello di cui non sono pienamente sicuro è il modo in cui ottengo l'offset, cioè dalla variabile $value2 quando è un integer (ho visto che alternativamente può assumere come valore la stringa da ricercare).