2011-08-16 22 views
6

Semplicemente perfetto: utf8_encode ($ stringa) sostituisce gli spazi regolari con spazi non interrotti ("\ u00a0"). Ho provato a filtrare il risultato con str_replace:PHP utf8_encode() converte gli spazi in spazi senza interruzioni

str_replace("\u00a0", " ", utf8_encode($string)) 

Ma questo non l'ha risolto.

EDIT: Sigh, sono un idiota. Non è un problema con utf8_encode(). Ho pensato che stavo usando quella funzione, ho dimenticato di disabilitarla nel mio codice. I miei dati vengono eseguiti attraverso json_encode() per una richiesta AJAX. È un problema con json_encode()? Sono preoccupato che potrei essere colpevole di aver abusato di Stack Overflow. Proverò a cercarlo su Google.

FINAL EDIT: il problema riguardava i dati stessi, che sono stati copiati da un documento di Word in una tabella MySQL. Tutti gli spazi sono stati copiati come spazi non interrotti. Scusa per aver sprecato il tempo di tutti.

+0

La domanda, come posso ottenere i miei spazi regolari indietro? –

+0

Se la stringa è codificata in UTF-8, è necessario sostituire la sequenza corrispondente di unità di codice anziché il valore del punto di codice stesso. –

+0

Qual è il tuo contributo? 0xA0 è anche lo spazio continuo in ISO 8859-1. –

risposta

12

str_replace ("\ u00a0", "", utf8_encode ($ dat)). Ma questo non l'ha risolto.

PHP ha solo stringhe di byte, non stringhe Unicode native; di conseguenza non vi è alcuna fuga \u e si chiedeva letteralmente di convertire le sequenze backslash-letter-u nell'input.

per sbarazzarsi di caratteri spazio unificatore si dovrà sostituire il via \xA0 (se fatto sui dati ISO-8859-1 avete presumibilmente prima di passare alla utf8_encode), o \xC2\xA0 (se fatto dopo la transcodifica a UTF 8).

utf8_encode transcodifica solo da ISO-8859-1 a UTF-8, non tocca gli spazi, quindi il mio sospetto è che si disponga di caratteri di spazio non interrotti nei dati effettivi.

+1

+1 per il tuo sospetto, come il mio –

0

Prova questo essere

$str = trim($str, chr(0xC2).chr(0xA0)) 
Problemi correlati