Domanda

Di norma, vorrei solo fare questo.

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

Se sapevo che stava per essere utf-8 vorrei aggiungere un minuscolo "u" modificatore per il modello e penso che sarebbe bene.Ma a causa delle relazioni di utf-8, tenendo 2x e, in alcuni casi, 3x lo spazio di archiviazione di quanto sarebbe necessario se il set di caratteri nativi sono stati utilizzati, sto cercando di non limitare l'applicazione a utf-8.

Così, sto cercando di stare lontano dai miei preferiti preg_ funzioni.

Più le cose sono abbastanza semplici, ma sono un po ' bloccato su sostituzioni, se io normalmente uso le classi di caratteri in preg_ come "\d".

È stato utile?

Soluzione

Implementare un deposito wrapper con mb_convert_encoding così internamente si dispone solo di manipolare UTF-8.

(Io continuo a pensare che dovrebbe richiedono UTF-8 e di risparmiare a tutti un sacco di guai.)

Altri suggerimenti

Penso che la codifica UTF-8 è tale che nulla in output codificati con un valore di byte di 127 o meno è sempre il carattere ASCII corrispondente valore di byte e non parte di un multi sequenza di byte.Così si può continuare a fingere la codifica ASCII in questa situazione e non causa problemi (come gli spazi e le cifre sono in ASCII).

Leggete la descrizione in http://en.wikipedia.org/wiki/UTF-8 dove si dimostra che tutti i byte in una sequenza multibyte hanno il bit più significativo set (es.sono tutti > 127).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top