字符串的排列将一组字符计为单个单元

My Question may sound noob but here it goes.

I take an input from the user as "Karim@123". I want my Program to create the permutations of the given input treating "Karim", "@" and "123" as single individual units.So the output will be something like "karim123@", "@karim123", "@123karim","123@karim","123karim@". Remember there will be 3! permutations in this particular case. I am using a php function but that function tells me all the permutations of "karim@123" which is not what i want. The function is as follows.

function permute($str,$i,$n) {
   if ($i == $n)
       print "$str
";
   else {
        for ($j = $i; $j < $n; $j++) {
          swap($str,$i,$j);
          permute($str, $i+1, $n);
          swap($str,$i,$j); // backtrack.
       }
   }
}

// function to swap the char at pos $i and $j of $str.
function swap(&$str,$i,$j) {
    $temp = $str[$i];
    $str[$i] = $str[$j];
    $str[$j] = $temp;
}   
$str = "hey";
permute($str,0,strlen($str));

PS : I am new to programming and algorithms.

PPS: Please, specify reason before downvoting.

Assuming the way you divide the string is that you include all alphabetical characters together, all special characters together and all numbers together, you can create a map like this for above example:

A => Karim
B => @
C => 123

Then create all permutations of "ABC", which will be:

ABC, ACB, BAC, BCA, CAB, CBA

and replace with the corresponding values from the map.