2013-07-06 8 views
8

Non ho idea di cosa stia succedendo, ma ho una stringa all'interno di un array. Deve essere una stringa come io ho fatto funzionare questo su di esso prima:Capire cosa è 0000 in PHP/JSON e liberarsene

$array[0] = (string)$array[0]; 

Se uscita $ array [0] per il browser in formato testo mostra questo:

hellothere 

Ma se io JSON encode $ array ottengo questo:

hello\u0000there 

Inoltre, ho bisogno di separare la parte 'non c'e' (il bit dopo la \ u0000), ma questo non funziona:

explode('\u0000', $array[0]); 

Non so nemmeno che cosa sia \ u0000 o come controllarlo in PHP.

Ho visto questo collegamento: Trying to find and get rid of this \u0000 from my json ... che suggerisce di str_replacing il JSON che viene generato. Non posso farlo (e ho bisogno di separarlo come menzionato sopra prima) quindi ho controllato Google per 'php check per backslash \ 0 byte', ma non riesco ancora a capire cosa fare.

+0

'\ u' è usato per sfuggire simboli Unicode, fondamentalmente l'unicode equivalente a' \ x00'. – Havenard

+0

\ u0000 è unicode. http://stackoverflow.com/questions/6058394/unicode-character-in-php-string –

+3

Hai provato a cercare su google "\ u0000"? –

risposta

10

\uXXXX è la fuga di notazione JSON Unicode (X è esadecimale).

In questo caso, significa che il char 0 ASCII, alias il byte NUL, di dividerlo È possibile farlo:

explode('\u0000', json_encode($array[0])); 

O meglio ancora:

explode("\0", $array[0]); // PHP doesn't use the same notation as JSON 
+0

explode ("\ 0", $ array [0]) - questo è quello. Nessuno degli altri ha funzionato. Accetterò la risposta non appena me lo consente. Grazie – user2143356

+0

PHP non capisce \ uHHHH notazione all'interno di stringhe. –

+0

@Nicholas: giusto. Comprende tuttavia '\ HH'. –

0

Prova explode("\u0000", $array[0]);, rendendo sicuro di usare virgolette doppie. Con le virgolette singole analizzerà il valore letterale di 6 caratteri.

Come altri hanno già detto, \u0000 è il carattere NIC Unicode.

+0

Tranne che è "\ u0000" e non "\ 0000". – icedwater

+0

... errore di battitura, il mio male –

10

La stringa che hai è "hello\0world" o "hello\x00world" quello che preferisci. Se si echo, il simbolo nullo \0 non verrà visualizzato, ecco perché si vede helloworld invece, ma json_encode lo rileverà e lo scapperà come fa con qualsiasi altro carattere speciale, ecco perché è stato sostituito da una stringa \u0000 visibile.

Nel mio modo di vederlo, json sta codificando perfettamente la stringa, lo \u0000 è lì per fare il suo lavoro di riprodurre la stringa immessa in modo json codificato. Non devi toccare la sua uscita. Se non vuoi che sia lo \u0000, dovresti invece correggere l'input .

+0

Ben spiegato. Grazie. – user2143356

+0

Come correggere l'input, ho un file con codifica UTF-8 - ma in nessun modo trovo caratteri vuoti - per favore aiuto – almaruf

+0

@almaruf Rimuovendo i caratteri dalla stringa prima di codificarlo, ovviamente. E sì, i caratteri nulli non verranno visualizzati e ti daranno l'impressione che semplicemente non siano lì, ma a livello binario lo sono e un 'str_replace()' sarà in grado di trovarli e sostituirli. – Havenard

2

Mi sono imbattuto in questo problema oggi e l'ho risolto sostituendo \ u0000 nel mio array con "" prima di inviarlo al client.

echo str_replace('\\u0000', "", json_encode($send)); 
7

si può semplicemente fare trim($str) senza dargli un charlist

+1

La soluzione migliore e più semplice che funzioni. – LopeGV

+0

Ottima risposta! Grazie – flangofas