1. Slashes hinzufügen mit addslashes()
Zum Hinzufügen von Backslashes („\”) zu einem String kann addslashes() verwendet werden. Die Funktion stellt jeweils jedem Backslash („\”), doppelten Anführungszeichen („"”) und einfachen Anführungszeichen („'”) ein Backslash voran.
<?php $str = 'Dieser String enthaelt "Anfuehrungszeichen" und ein \\ (Schraegstrich, Backslash).'; var_dump($str); var_dump(addslashes($str)); ?>
string(81) "Dieser String enthaelt "Anfuehrungszeichen" und ein \ (Schraegstrich, Backslash)." string(84) "Dieser String enthaelt \"Anfuehrungszeichen\" und ein \\ (Schraegstrich, Backslash)."
2. Slashes mit stripslashes() entfernen
Um Backslashes wieder zu entfernen kann stripslashes() verwendet werden. Die Funktion kehrt den Effekt von addslashes() um.
<?php $str = 'Dieser String enthaelt "Anfuehrungszeichen" und ein \\ (Schraegstrich, Backslash).'; $str2 = addslashes($str); var_dump($str2); var_dump(stripslashes($str2)); ?>
string(84) "Dieser String enthaelt \"Anfuehrungszeichen\" und ein \\ (Schraegstrich, Backslash)." string(81) "Dieser String enthaelt "Anfuehrungszeichen" und ein \ (Schraegstrich, Backslash)."
3. Beliebige Zeichen escapen mit addcslashes()
Backslashes können auch zu selbst festgelegten Zeichen hinzugefügt werden. Das kann beispielsweise dann nützlich sein, wenn man nur einfache Anführungszeichen escapen will.
<?php $str = 'Das ist ein sogenannter "String" bzw. \'String\'.'; $str2 = addcslashes($str, "'"); $javascript = "doSomething('$str2');"; var_dump($javascript); ?>
string(65) "doSomething('Das ist ein sogenannter "String" bzw. \'String\'.');"
4. SQL für MySQL escapen mit mysqli:real_escape_string()
Soll ein String in die Datenbank eingetragen werden, dann ist mysqli::real_escape_string() vorzuziehen (falls MySQL als Datenbank verwendet wird), da diese besser darin ist, SQL-Injections vorzubeugen. Im Alltag wird man sehr häufig mit dieser Methode arbeiten.
<?php $benutzerEingabe = 'Das ist ein sogenannter "String" bzw. \'String\'.'; $benutzerEingabe = mysqli::real_escape_string($benutzerEingabe); ?>
5. Strings in regulären Ausdrücken escapen
Soll ein String als Teil eines regulären Ausdrucks (regular expression) verwendet werden und könnte dieser Steuerzeichen enthalten, dann können diese mit preg_quote() escapet werden.
<?php $benutzerEingabe = 'hello?'; $regex = '('.preg_quote($benutzerEingabe).')+'; // die Benutzereingabe ein Mal oder oefter $teststring = 'hello?hello?'; var_dump(preg_quote($benutzerEingabe), preg_match('/'.$regex.'/u', $teststring)); ?>
string(7) "hello\?" int(1)
In der Praxis kommt es eher selten vor, dass preg_quote verwendet wird, da man in der Regel die Benutzereingaben auf einen bestimmten regulären Ausdruck hin überprüft und nicht besagte Eingaben als Teil eines solchen regulären Ausdrucks verwendet. Als nützlich kann sich preg_quote erweisen, wenn man in einem regulären Ausdruck nach vielen Zeichen sucht, die gleichzeitig auch Steuerungszeichen sind. Jedes dieser Zeichen zu escapen kann sehr unübersichtlich werden, sodass preg_quote() in diesen Fällen vorzuziehen ist.
<?php $str = 'Dieser String enthält ~~*Sonderzeichen*~~!'; var_dump($str); $zuErsetzendeSonderzeichen = '*+~#?=)(&%$§"!-.,'; $regex = '['.preg_quote($zuErsetzendeSonderzeichen).']+'; $str = preg_replace('/'.$regex.'/u', '', $str); var_dump($str); ?>
string(43) "Dieser String enthält ~~*Sonderzeichen*~~!" string(36) "Dieser String enthält Sonderzeichen"