Hello,
ich will alle Interpunktionszeichen, die in Namen nicht vorkommen, durch Leerzeichen ersetzen. Ich mache das Momentan mit dem Ausruck
$search=preg_replace("/[,;:.\/]/" , " " , $search);
.
Wie bekomme ich hin, dass sämtliche Backslashes auch entfernt werden? Auch mehrfache Backslashes?
Du machst es Dir auch nicht leicht :-)
Innerhalb von PHP ist der Backslash in Strings mit doppelten Anführungszeichen ein Maskierungszeichen/Escapezeichen für viele Sonderbedeutungen.
siehe: http://de2.php.net/manual/de/language.types.string.php
In einem String, der durch einfache Anführungszeichen eröffnet wurde, maskiert der Backslash immer noch das Anführungszeichen.
Wenn Du also nun in dem Ausdruck
$search=preg_replace("/[,;:./]/" , " " , $search);
einen Backslash eingeben willst, dann müsste der also aus PHP-Sicht verdoppelt werden.
$search=preg_replace("/[,;:.\/]/" , " " , $search);
Nun ist es so, dass im resultierenden Ausdruck ein Backslash ankommt. Da aber auch bei den Regular Expressions der Backslah für die Maskierung benutzt wird, würde der nun wiederum als Maskierungszeichen für das nachfolgende Zeichen betrachtet werden. Du musst ihn also auch maskieren. Das führt dann irgendwann zu dem Ausdruck
$search=preg_replace("/[,;:.\\/]/" , " " , $search);
Und das läuft dann unter dem Motto: "Einer kam durch".
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg