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".

Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top