Silja: preg_replace - Fehler

Hi,
vermutlich ein ganz primitiver Fehler, aber ich komme nicht darauf.
Da ein ins Formular eingegebenes ' bzw " in der Ausgabe als ' bzw. " erscheint, wollte ich das \ entfernen.
Das Statement

  
$v = preg_replace('/\\/', '', $v);

bringt den Fehler:
Warning: preg_replace() [function.preg-replace]: No ending delimiter '/' found in ....
Woran liegt dies?
Gruß
Silja

  1. Tach!

    Da ein ins Formular eingegebenes ' bzw " in der Ausgabe als ' bzw. " erscheint, wollte ich das \ entfernen.

    Das liegt an den Magic Quotes, und die schaltet man anders aus: Disabling Magic Quotes.

    dedlfix.

  2. Hallo,

    vermutlich ein ganz primitiver Fehler, aber ich komme nicht darauf.
    Da ein ins Formular eingegebenes ' bzw " in der Ausgabe als ' bzw. " erscheint, wollte ich das \ entfernen.

    dann solltest du dieses Übel an der Wurzel bekämpfen, anstatt an den Symptomen.

    Das Statement
    $v = preg_replace('/\\/', '', $v);
    bringt den Fehler:
    Warning: preg_replace() [function.preg-replace]: No ending delimiter '/' found in ....
    Woran liegt dies?

    Am nicht beachteten doppelten Escaping. Für die korrekte Notation in einem PHP-String hast du den Backslash korrekt maskiert/escapet, indem du ihn verdoppelt hast. Was die RegEx-Engine bekommt, lautet nun aber: '//'
    Damit wird der abschließende Slash, der eigentlich Delimiter sein möchte, maskiert.

    Was tun wir also, um zu erreichen, dass die RegEx-Engine zwei Backslashes bekommt? - Genau, zweimal je einen maskierten Backslash im PHP-Code notieren: '/\\\\/'

    Aber eigentlich solltest du dafür sorgen, dass das PHP-Feature "magic quotes" deaktiviert wird. Entweder stellt dein Webhoster ein Verwaltungs-Tool zur Verfügung, wo du solche Einstellungen vornehmen kannst, oder du musst eine eigene php.ini verwenden. Im Script selbst über ini_set() geht's nicht, weil es zu dem Zeitpunkt, wo das Script ausgeführt ist, schon zu spät ist - da ist schon alles passiert.

    Ciao,
     Martin

    --
    Chef:         Zum vierten Mal in dieser Woche erwische ich Sie nun schon beim Zuspätkommen. Was haben Sie dazu zu sagen?
    Angestellter: Dann muss heute Donnerstag sein.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. @@Martin & dedlfix
      Hallo,

      php.ini darf ich nicht verändern.
      Ich habe aber gefunden, dass man es auch in .htaccess setzen kann:
        SetEnv MAGIC_QUOTES 0
      oder
        php_flag magic_quotes_gpc off

      Beides funktioniert nicht.

      1. Tach!

        Es kommt drauf an, wie PHP in den Apachen eingebunden ist. Als Apache-Modul geht natürlich nur die Änderung über .htaccess-Parameter. Über (F)CGI gibt es die Möglichkeit, im Verzeichnis des gestarteten Scripts eine php.ini hinzulegen, die dann die globale ersetzt. Seit PHP 5.3 gibt es die .user.ini.

        php.ini darf ich nicht verändern.

        Jedenfalls nicht die globale.

        Ich habe aber gefunden, dass man es auch in .htaccess setzen kann:
          SetEnv MAGIC_QUOTES 0

        Diese Möglichkeit kennt das PHP-Handbuch nicht. Ich bezweifle, dass sie irgendeine generelle Gültigkeit hat.

        oder
          php_flag magic_quotes_gpc off

        Geht nur bei PHP als Apache-Modul, wenn das der Apache gestattet.

        Ich verlinkte die PHP-Handbuchseite, die eine Funktion enthält, die man zur Not (kein anderweitiges Abschalten möglich) am Scriptanfang aufrufen kann.

        dedlfix.

      2. @@Martin & dedlfix
        Hallo,

        php_flag magic_quotes_gpc off

        funktioniert doch.
        Danke Euch!