Substitua "ABC123DEF" por "ABC 123 DEF" na string multibyte
Pergunta
Normalmente eu apenas faria isso.
$str = preg_replace('#(\d+)#', ' $1 ', $str);
Se eu soubesse que seria UTF-8, adicionaria um modificador "U" minúsculo ao padrão e acho que seria bom. Mas, devido aos relatórios de UTF-8 de 2x e, em alguns casos, 3x o espaço de armazenamento do que seria usado se o conjunto de caracteres nativo fosse usado, estou tentando não restringir o aplicativo ao UTF-8.
Assim, estou tentando ficar longe das minhas funções preg_ favoritas.
A maioria das coisas tem sido bastante simples até agora, mas estou um pouco preso nas substituições, onde normalmente usaria classes de personagens em Preg_, como " d".
Solução
Implementar um invólucro de armazenamento com mb_convert_encoding
Então, internamente, você só precisa manipular o UTF-8.
(Eu ainda acho que você deveria requer UTF-8 e salve a todos muitos problemas.)
Outras dicas
Eu acho que a codificação UTF-8 é tal que qualquer coisa na saída codificada com um valor de byte de 127 ou menos é sempre o caractere ASCII que corresponde a esse valor de byte e nunca parte de uma sequência de bytes multi. Portanto, você pode continuar fingindo que a codificação é ASCII nessa situação e não causar problemas (como espaços e dígitos são todos ASCII).
Veja a descrição em http://en.wikipedia.org/wiki/utf-8 onde mostra que todos os bytes em uma sequência multibyte têm o conjunto de bits mais significativo (por exemplo, todos> 127).