2010-04-07 10 views
12

Ho bisogno di pulire una stringa che viene (copia/incollata) da varie applicazioni della suite di Microsoft Office (Excel, Access e Word), ognuno con il proprio set di codifica.Ho una stringa con " u00a0" e devo sostituirla con "" str_replace fallisce

Sto utilizzando json_encode per scopi di debug per poter vedere ogni singolo carattere codificato.

Sono in grado di pulire tutto ciò che ho trovato finora (\ r \ n) con str_replace, ma con \ u00a0 non ho fortuna.

$string = '[email protected]\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;[email protected]'; //this is the output from json_encode 

$clean = str_replace("\u00a0", "",$string); 

rendimenti:

[email protected]\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;[email protected] 

che è esattamente lo stesso; ignora completamente \ u00a0.

C'è un modo per aggirare questo? Inoltre, sento che sto reinventando la ruota, c'è una funzione/classe che toglie completamente OGNI possibile carattere di OGNI possibile codifica?

____EDIT____

Dopo le prime due risposte ho bisogno di chiarire che il mio esempio funziona, perché è l'uscita dal json_encode, non la stringa effettiva!

risposta

6

Funziona per me, quando si copia/incolla il codice. Prova a sostituire le virgolette doppie nel tuo str_replace() con virgolette singole o sfuggire alla barra rovesciata ("\\u00a0").

+0

Nel tuo esempio funziona perché stai utilizzando l'output di js on_encode non la stringa vera e propria! Se copio incolla il mio codice funziona perfettamente anche per me. – 0plus1

+0

Cosa succede se si sostituisce '\ xa0' piuttosto che' \ u00a0'? –

+0

Questo succede. Elimina le istanze di \ u00a0 e quando viene stampato da json_encode sembra ok, tuttavia se echo la stringa senza codifica json ottengo un dove prima c'era il \ u00a0. A questo punto non riesco a capire cosa sta succedendo .. per favore dammi una spiegazione! :-) – 0plus1

1

Devi fare questo con apici come questo:

str_replace('\u00a0', "",$string); 

O, se vi piace usare le virgolette, è necessario sfuggire alla barra rovesciata - che sarebbe simile a questa:

str_replace("\\u00a0", "",$string); 
+0

Ancora non funzionerà – 0plus1

+0

Mi sono imbattuto in questo problema pure. Ecco la soluzione che ha funzionato per me. Ho copiato una stringa con il noto carattere \ u00a0 nel mio editor, quindi ho copiato lo 'spazio' che \ u00a0 lo rappresenta e lo abbiamo incollato nella funzione str_replace. Alla fine assomiglia a questo: str_replace ("", "", $ stringa). Lo spazio nel primo parametro è il non standard \ u00a0. Ora eseguilo attraverso json_encode. –

4

Ho appena avuto lo stesso problema. Apparentemente, json_encode di PHP restituirà null per ogni stringa con uno 'spazio non-breaking'.

La soluzione è quella di sostituire questo con uno spazio regolare:

str_replace(chr(160),' '); 

Spero che questo aiuta qualcuno - ci ho messo un'ora per capire.

37

Combinando ord() con substr() sulla mia stringa contenente \ u00a0, ho trovato la seguente maledizione di lavorare:

$text = str_replace(chr(194) . chr(160), ' ', $text); 
+0

Grazie, questo funziona per me. – user11153

+0

Grazie! mi ha risparmiato un sacco di tempo '" \ xc2 \ xa0 "' funziona pure. – elipoultorak

+0

ha funzionato per me. Sto cercando di scartare i dati da un sito che ha il testo in francese .. –

0

questo funziona anche, ho trovato da qualche parte

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

Questo ha fatto il trucco per me:

$str = preg_replace("~\x{00a0}~siu", " ", $str); 
Problemi correlati