2009-03-13 9 views
16

Tengo una variable PHP que contiene una cadena que representa una estructura XML. Esta cadena contiene caracteres ilegales que no me permiten crear un nuevo objeto SimpleXMLElement a partir de la cadena. No tengo forma de preguntarle a la fuente del contenido para modificar su respuesta, por lo que debo ejecutar algunas tareas de limpieza antes de crear un objeto SimpleXMLElement.¿Cómo puedo eliminar el carácter NULL de la cadena

Creo que el personaje que causa el problema es un (0x00 (00) HEX), y está ubicado dentro de uno de los Nodos de texto de este XML de cadena.

¿Cuál es la mejor manera de eliminar este carácter u otros caracteres que podrían romper el objeto SimpleXMLElement?

Respuesta

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

reemplazará todos los caracteres nulos en la cadena $text. También puede suministrar matrices para los primeros dos argumentos, si desea hacer reemplazos múltiples.

+0

dependiendo de la codificación (UTF-8), esto podría eliminar caracteres válidos –

+0

@Johannes Rossel: I se agregó $ text = para hacer coincidir el código y el texto. str_replace no modifica el tercer argumento – phihag

+2

, el código solo parece funcionar cuando hago esto: $ text = str_replace ("�", "", $ text); –

9

trim() también eliminará los caracteres nulos de cualquier extremo de la cadena fuente (pero no dentro).

$text = trim($text); 

he encontrado esto útil para la comunicación servidor de socket, especialmente al pasar JSON alrededor, como un carácter nulo provoca json_decode() para volver nula.

+1

Puede ser una respuesta anterior, pero la solución más simple para un problema que estaba teniendo con un \ u0000 en mi salida de depuración json (una excepción convertida en matriz, claves de matriz contenían 0 caracteres) :) –

+0

trim resolvió el problema para mí después horas de probar otras soluciones. ¡Gracias! – Rodniko

0

Aunque no es probable que el objetivo principal de su pregunta, por favor, echar un vistazo a las funciones de filtro de PHP: http://www.php.net/manual/en/intro.filter.php

funcionamiento del filtro de validar y desinfectar los valores. Formar el sitio de 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";  
} 

Resultado:

Este (a) dirección de correo electrónico desinfectados se considera válido.

Esta (b) dirección de correo electrónico desinfectada se considera inválida.

Esta dirección de correo electrónico desinfectada (C) se considera válida.

Antes: ([email protected])

Después de: [email protected]~~V~~3rd

+0

¿Cuál es la cadena que no es una dirección de correo electrónico? – Jabari

Cuestiones relacionadas