2010-12-07 12 views
0

Ich bin in einer Situation, in der ich eine Zeichenfolge, die Benutzereingabe aber ein benutzerdefiniertes Trennzeichen enthält, explodieren muss. Ich möchte sicherstellen, dass der Benutzer dieses Trennzeichen in seiner Eingabe nicht eingeben kann, um die Zeichenfolge nicht an der falschen Stelle zu explodieren.Verhindern, dass Benutzer eine Zeichenfolge in PHP explodiert

Was ist der beste Weg, dies zu tun? Gibt es eine Art von Filter, den ich über die Benutzerdaten ausführen sollte, um das Auftreten des Trennzeichens zu entfernen? Ich würde denken, dass es eine bessere Antwort geben würde, als nur ein eindeutiges Trennzeichen zu erstellen.

Danke.

+1

Diese Frage ist verwirrend. Wenn sie dieses Trennzeichen in der Zeichenkette nicht eingeben können, wie kommt es überhaupt in die Zeichenkette? Und wenn Sie das Begrenzungszeichen auf der Serverseite einfügen, warum referenzieren Sie dann nicht einfach die Zeichenfolgenposition durch ihren Index, anstatt ein Trennzeichen zu verwenden? –

+0

Nicht, dass sie das begrenzende Zeichen nicht eingeben können, aber ich möchte, dass es nicht als Trennzeichen auf der Serverseite interpretiert wird. –

+1

Wenn Sie ihre Zeichenfolge erhalten, bevor sie mit Ihrem magischen Begrenzer verkettet wird, ersetzen Sie einfach alle Vorkommen des Begrenzers durch eine unwahrscheinliche Zeichenfolge (wie unten zu sehen, z. B. "--- DELIM ---"). Wenn Sie dazu keine Gelegenheit haben, ist das Problem unlösbar. –

Antwort

5

Dies ist ein uraltes Problem, also löse es so, wie es bereits gelöst wurde.

In CSV-Dateien ist das Komma das Trennzeichen, Einträge können Kommas enthalten. Wie? Umgeben Sie die Einträge mit Anführungszeichen. Was passiert, wenn der Eintrag Zitate enthält? Verdoppeln Sie die Anführungszeichen für die Benutzereingabe, damit Sie wissen, dass es sich um Daten und keine Trennzeichen handelt.

Field One,Field Two,"Field, Three","Field ""Four""" 

PHP hat Funktionen für die Erstellung und CSV-Format mit benutzerdefinierten definierten Trennzeichen zu lesen, so dass Sie nicht einmal den Code schreiben müssen.

+0

CSV, JSON, XML, native Arrays, serialisierte Arrays ... so viele Optionen. – deceze

+0

verzeihen Sie mir, aber ich möchte nur sicherstellen, dass ich das verstehe, okay - können Sie in Ihrem Beispiel einen etwas funktionierenderen Code zur Verfügung stellen? –

+0

http://www.php.net/manual/en/function.str-getcsv.php –

0

Wenn Sie nicht str-getcsv in Ihrer Umgebung haben, dann wie in den Kommentaren in Ihrer ursprünglichen Frage.

Angenommen Ihr Begrenzer das Pipe-Symbol ist

$clientString = 'somestring|fobar'; 
$clientString = str_replace('|', '{{{somecrazydelimiter}}}', $clientString); 

Sie können die später umkehren die Situation es nach explodiert und ersetzen Sie die temporäre Trennzeichen mit Original:

$clientString = str_replace('{{{somecrazydelimiter}}}', '|', $clientString); 
Verwandte Themen