2009-03-13 28 views
16

Ho una variabile PHP che contiene una stringa che rappresenta una struttura XML. Questa stringa contiene caratteri ilegal che non consentono di creare un nuovo oggetto SimpleXMLElement dalla stringa. Non ho un modo per chiedere alla fonte del contenuto di modificare la loro risposta, quindi ho bisogno di eseguire un po 'di pulizia su questa stringa prima di creare un oggetto SimpleXMLElement.Come rimuovere il carattere NULL dalla stringa

Credo che il carattere che causa il problema sia un carattere (0x00 (00) HEX) e che si trovi all'interno di uno dei nodi di testo di questa stringa XML.

Qual è il modo migliore per rimuovere questo carattere o altri caratteri che potrebbero interrompere l'oggetto SimpleXMLElement.

risposta

43
$text = str_replace("\0", "", $text); 

sostituirà tutti i caratteri nulli nella stringa $text. È inoltre possibile fornire array per i primi due argomenti, se si desidera eseguire più sostituzioni.

+0

seconda della codifica (UTF-8), questo potrebbe rimuovere caratteri validi –

+0

@Johannes ROSSEL: I aggiunto $ text = per far corrispondere il codice e il testo. str_replace non modifica il terzo argomento – phihag

+2

il codice sembra funzionare solo quando lo faccio: $ text = str_replace ("�", "", $ text); –

9

trim() rimuove anche i caratteri nulli, da entrambe le estremità della stringa di origine (ma non all'interno).

$text = trim($text); 

ho trovato questo utile per la comunicazione server socket, soprattutto quando si passa JSON intorno, come un carattere null provoca json_decode() per tornare null.

+1

Potrebbe essere una vecchia risposta, ma la soluzione più semplice per un problema che avevo con un \ u0000 nel mio output di debug JSON (un'eccezione convertita in array, le chiavi dell'array contenevano 0 caratteri) :) –

+0

trim risolse il problema per me dopo ore di provare altre soluzioni. Grazie! – Rodniko

0

Anche se non è probabilmente l'obiettivo primario della tua domanda, si prega di dare un'occhiata a funzioni di filtro di PHP: http://www.php.net/manual/en/intro.filter.php

Funzioni di filtro convalidano e disinfettare i valori. Formare il sito PHP:

$a = '[email protected]'; 
$b = 'bogus - at - example dot org'; 
$c = '([email protected])'; 

$sanitized_a = filter_var($a, FILTER_SANITIZE_EMAIL); 
if (filter_var($sanitized_a, FILTER_VALIDATE_EMAIL)) { 
    echo "This (a) sanitized email address is considered valid.\n"; 
} 

$sanitized_b = filter_var($b, FILTER_SANITIZE_EMAIL); 
if (filter_var($sanitized_b, FILTER_VALIDATE_EMAIL)) { 
    echo "This sanitized email address is considered valid."; 
} else { 
    echo "This (b) sanitized email address is considered invalid.\n"; 
} 

$sanitized_c = filter_var($c, FILTER_SANITIZE_EMAIL); 
if (filter_var($sanitized_c, FILTER_VALIDATE_EMAIL)) { 
    echo "This (c) sanitized email address is considered valid.\n"; 
    echo "Before: $c\n"; 
    echo "After: $sanitized_c\n";  
} 

Risultato:

Questo (a) indirizzo e-mail igienizzati è considerata valida.

Questo (b) indirizzo e-mail disinfettato è considerato non valido.

Questo indirizzo email (C) disinfettato è considerato valido.

Prima: ([email protected])

Dopo: [email protected]~~V~~3rd

+0

Qual è la stringa non è un indirizzo email ??? – Jabari

Problemi correlati