preg_replace('/(?<= ) {1,2}/', "\xc2\xa0", $str);
Lookbehind (?<= )
видит, предшествует ли пробелу совпадение, {1,2}
соответствует 1 и 2 пробелам. Замена будет происходить только с соответствующими пробелами, а не с задним взглядом. Если вы хотите заменить как можно больше пробелов (если их больше 3), просто замените {1,2}
на +
.