[PHP] Nur Buchstaben und Zahlen im String lassen

Nachdem ich diesen Schnipsel heute zum bestimmt 10 mal gesucht habe wird es jetzt Zeit ihn endlich mal hier zu verewigen.

Ihr kennt das vielleicht… da hat man einen String – egal ob einen Dateinamen beim Dateiupload oder eine Usereingabe in einem Textfeld – und dort stehen Sachen drin die man einfach sooo nie wollte.

Bestes Beispiel war heute eine Kundin die mir Mitteilte das sie Bilder in ein Systemhochladen wollte und die Bilder werden einfach nicht angenommen. Beim Blick auf den Dateinamen im Ordner wurde mir klar warum der Browser nix anzeigte… der Dateiname lautete: “1_tr352&3 web2 the hill Da3 DSC03254.jpg”…
Genau für soetwas ist die folgende Funktion wundervoll… sie macht daraus einfach “3_1tr352amp3web2thehillDa3DSC03254.jpg”… gut, immer noch nicht schön… aber besser und der Browser kommt mit klar.

Anderes, einfacheres Beispiel… der User gibt irgendwo “bla(§blub1.- Dß?3äüö” ein (warum auch immer)… die Funktion macht daraus “blablub1D3”.

Man kann natürlich auch noch andere Zeichen zulassen, wie z.B. Umlaute, Leerzeichen, Punkt, Komma, etc. Was man möchte.

Hier nun die Funktion:

$String = preg_replace('/[^a-z0-9]/', '', $String); //nur kleine Buchstaben und Zahlen

$String = preg_replace('/[^a-zA-Z0-9]/', '', $String); //kleine und grosse Buchstaben und Zahlen

$String = preg_replace('/[^a-zA-Z0-9äÄöÖüÜß]/', '', $String); //kleine und grosse Buchstaben, Umlaute und Zahlen

$String = preg_replace('/[^a-zA-Z0-9äÄöÖüÜß., ]/', '', $String); //kleine und grosse Buchstaben, Umlaute, Komma, Punkt, Leerzeichen und Zahlen

2 Kommentare
  1. Alex sagte:

    Danke für die Gedankenstütze :-)

    Immerhin lassen sich auch “böse” Sachen machen, ohne Filterung etc. können in einem Textfeld auch Links etc. oder andere Sachen angezeigt werden.

    Was mich sehr interessieren würde ist, wie können beispielsweise 2 Strings für eine Sache verwendet werden?

    Beispiel:
    $String = preg_replace(‘WERT’, ”, $String);
    ist nur für einen String vorgesehen, aber wie sieht es mit 2 oder mehreren Strings aus, wo der gleiche preg_replace ausgeführt werden soll?

    Die Frage stelle ich, da ich mehrere Strings habe, ich aber nicht pro String immer den gleichen preg_replace ausführen möchte, gibt es da eine Möglichkeit anstatt eines Strings auch mehrere für eine Sache zu verwenden?

    Vielen Dank.

    Antworten
  2. Gordon sagte:

    Hallo Alex,

    freut mich wenn ich helfen konnte.

    Naja, das kommt immer darauf an wie man die Daten wieder ausgibt. Links werden nur zu “echten” Links, wenn man HTML Code in das Eingabefeld eingibt und dieses dann ungefiltert irgendwo auf der Seite wieder ausgibt.
    Es ist Grundsätzlich immer von Fall zu Fall unterschiedlich. Z.B. könnte man das auch benutzen um SQL-Injections abzufangen. … Wie gesagt, die Anwendungsmöglichkeiten des Schnipsels sind unendlich :)

    Hmm… meines wissens nach wirst Du wohl (oder übel) jeden String einzeln abfragen müssen. Außer du verbindest Sie später sowieso… dann könntest Du sie auch vorher verbinden (z.B. $String = $String1.$String2.$String3…) und dann durch die Funktion jagen. Aber falls Du das nicht möchtest… dann jeden String einzeln.

    Antworten

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Ich stimme der Datenschutzerklärung zu