2009-10-09 17 views
0

Normalement, je voudrais juste faire cela.Remplacer "abc123def" par "abc 123 def" dans la chaîne multi-octets

$str = preg_replace('#(\d+)#', ' $1 ', $str); 

Si je savais que ça allait être utf-8 Je voudrais ajouter un minuscule « u » modificateur au modèle et je pense que je serais bon. Mais à cause des rapports d'utf-8 prenant 2x et dans certains cas 3x l'espace de stockage que cela prendrait si le jeu de caractères natif était utilisé, j'essaye de ne pas restreindre l'application à utf-8. Ainsi, j'essaie de rester loin de mes fonctions preg préférées.

La plupart des choses ont été assez simples jusqu'ici, mais je suis un peu bloqué sur les remplacements où j'utiliserais normalement des classes de caractères dans preg_ comme "\ d".

Répondre

2

Implémentez un wrapper de stockage avec mb_convert_encoding afin qu'en interne vous ne devez manipuler que UTF-8.

(je pense toujours que vous devriez require UTF-8 et sauver tout le monde beaucoup d'ennuis.)

+0

Je pense que ce que je vais finir par faire ici, c'est continuer avec le script de telle sorte que toutes les fonctionnalités de base continueront à utiliser les fonctions mb_ de telle sorte que l'encodage puisse être changé, et marquez quelques fonctionnalités avancées pour qu'elles ne soient disponibles que lorsque le codage actif est utf-8. – joebert

1

Je pense que encodage UTF-8 est telle que rien dans la sortie codée avec une valeur d'octet de 127 ou moins est toujours Caractère ASCII correspondant à cette valeur d'octet et ne faisant jamais partie d'une séquence multi-octets. Vous pouvez donc continuer à prétendre que l'encodage est ASCII dans cette situation et ne pas causer de problèmes (comme les espaces et les chiffres sont tous ASCII). Voir la description dans http://en.wikipedia.org/wiki/UTF-8 où il montre que tous les octets dans une séquence multi-octets ont l'ensemble de bits le plus significatif (par exemple tous> 127).

+0

Cela est certainement vrai pour UTF-8 et ISO-8859-n, mais je pense qu'il était spécifiquement préoccupé par les codages plus larges qui seraient stockés par ex. Texte asiatique plus compact. (Je ne pense pas que ça vaille la peine de s'inquiéter, d'exiger UTF-8, vivre heureux.) –