str_getcsv: String mit Anführungszeichen (Quotes) komfortabel in PHP parsen

Endlich eine schöne Lösung in zumindest in PHP, um einen komplexen String in seine Bestandteile zu zerlegen. Jeder der schon mal eine „google-like“ Suchmaschine gebaut hat kennt das Problem, den eingegebene Suchstring in einen SQL-Querystring umzusetzen. Ein einfaches explode(' ',$suchStr) ist da leider nicht leistungsfähig genug, da u.a. komplexe bzw. verschachtelte Suchworte ( Blabla „Bla Bla“ FooBar ‚Foo Bar‘ ) also mit Anführungszeichen innerhalb des Suchstrings falsch zerlegt werden. Eine Google-Recherche nach einer pragmatischen Lösung brachte die abenteuerlichsten Routinen anderer Entwickler. Damit wollte ich mich noch nicht zufrieden geben aber auch nicht selbst beginnen, über evtl. reguläre Ausdrücke einen eigenen Stringparser zu bauen. Also habe ich erstmal etwas anderes gemacht. Eine erneute Recherche zu einen späteren Zeitpunkt führte mich zu: PHP explode the string, but treat words in quotes as a single word. Dort fand ich putzig, das oben ein interessantes RegExp-Pattern diskutiert wurde, am Schluß jedoch der schnörkellose Satz auftaucht: „This would have been much easier…“. Gemeint war die PHP Funktion, str_getcsv(), welche seit PHP 5.3 in zu den Standard-Funktionen gehört. Ich übernehme der Einfachheit halber einfach mal das „Lorem ipsum“ Beispiel vom Stackoverflow, um das Ergebnis von str_getcsv zu demonstrieren.

Für alle die, die noch nicht PHP 5.3 einsetzen können, sollten sich die str_getcsv-Manualseite bei PHP.net durchsehen, dort sind abwärtskompatible Übergangslösungen gelistet.

$string = 'Lorem ipsum "dolor sit amet" consectetur "adipiscing elit" dolor';
var_dump(str_getcsv($string, ' '));

Ergebnis:

array(6) {
     [0]=>   string(5) "Lorem"
     [1]=>   string(5) "ipsum"
     [2]=>   string(14) "dolor sit amet"
     [3]=>   string(11) "consectetur"
     [4]=>   string(15) "adipiscing elit"
     [5]=>   string(5) "dolor"
   }

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.