2009-03-13 15 views
16

Ich habe eine PHP-Variable, die eine Zeichenfolge enthält, die eine XML-Struktur darstellt. Diese Zeichenfolge enthält ungültige Zeichen, mit denen ich kein neues SimpleXMLElement-Objekt aus der Zeichenfolge erstellen kann. Ich habe keine Möglichkeit, die Quelle des Inhalts zu bitten, ihre Antwort zu ändern, daher muss ich eine Reinigung für diese Zeichenfolge ausführen, bevor ich ein SimpleXMLElement-Objekt erstelle.Wie kann ich das NULL-Zeichen aus Zeichenfolge entfernen

Ich glaube, das Zeichen, das das Problem verursacht, ist ein (0x00 (00) HEX) -Zeichen, und es befindet sich in einem der Textknoten dieser Zeichenfolge XML.

Was ist der beste Weg, um dieses Zeichen oder andere Zeichen zu entfernen, die das SimpleXMLElement-Objekt brechen könnten.

Antwort

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

ersetzt alle Nullzeichen in der Zeichenfolge $text. Sie können auch Arrays für die ersten beiden Argumente bereitstellen, wenn Sie mehrere Ersetzungen durchführen möchten.

+0

auf der Codierung abhängig (utf-8), das gültige Zeichen –

+0

@Johannes Rössel entfernen konnte: Ich $ text = hinzugefügt, damit Code und Text übereinstimmen. str_replace ändert das dritte Argument nicht – phihag

+2

Der Code scheint nur zu funktionieren, wenn ich dies tue: $ text = str_replace ("�", "", $ text); –

9

trim() entfernt auch Nullzeichen von beiden Enden der Quellzeichenfolge (aber nicht innerhalb).

$text = trim($text); 

Ich habe dies nützlich für die Socket-Server-Kommunikation gefunden, vor allem, wenn sie um JSON vorbei, als ein Null-Zeichen json_decode() bewirkt, dass null zurückzukehren.

+1

Könnte eine alte Antwort sein, aber die einfachste Lösung für ein Problem, das ich mit einem \ u0000 in meiner JSON-Debug-Ausgabe hatte (eine Ausnahme in Array konvertiert, Array-Schlüssel enthalten 0 Zeichen.) :) –

+0

trim löste das Problem für mich nach Stunden, andere Lösungen zu versuchen. Vielen Dank! – Rodniko

0

Während es ist wahrscheinlich nicht das primäre Ziel Ihrer Frage, haben Sie einen Blick auf die PHP-Filterfunktionen: http://www.php.net/manual/en/intro.filter.php

Filterfunktionen zu validieren und Werte sanieren. Bilden Sie die PHP-Website:

$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";  
} 

Ergebnis:

Diese (a) hygienisiert E-Mail-Adresse ist gültig betrachtet.

Diese (b) bereinigte E-Mail-Adresse wird als ungültig betrachtet.

Diese (C) bereinigte E-Mail-Adresse gilt als gültig.

Vorher: ([email protected])

Nach: [email protected]

+0

Was ist die Zeichenfolge ist keine E-Mail-Adresse ??? – Jabari

Verwandte Themen