Jörg: php/mysql: Überflüssige Zeichen und Zeilenumbrüche am Ende eines Strings entfernen

Hallo,

ich erhalte immer wieder mal leere Zeilenumbrüche an Enden eines Strings in der db. Bin aber nihct sicher, ob ich die schon per Datenimport aus anderer Software mit importiert habe, oder selber in Textareas verursache.

Daher nochmal die Nachfrage:

$Variable = mysqli_real_escape_string($link,$Variable);

sollte doch beim Einfügen in die db alle Leerzeichen und Zeilenumbrüche am Strigende entfernen oder habe ich das missverstanden?

Irgendwie habe ich den Eindruck, dass nur

$Variable = mysqli_real_escape_string($link,trim($Variable));

das wirklich macht.

Jörg

  1. Hallo Jörg,

    (... mysqli_real_escape_string ...) sollte doch beim Einfügen in die db alle Leerzeichen und Zeilenumbrüche am Strigende entfernen

    Äh, nein? Wo findest Du das hier?

    PHP ist zwar kein Wunderwerk an Software-Architektur, aber gelegentlich bekommen sie auch mal was richtig hin: Do One Thing And Do It Right - gilt für Methoden und Funktionen gleichermaßen.

    Deswegen ist der selbst aufgerufene trim die richtige Lösung.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Hi Rolf,

      nein? Wo findest Du das hier?

      Ok, jetzt les ichs selber. Es encodiert die Zeichen "nur".

      Characters encoded are NUL (ASCII 0), \n, \r, , ', ", and Control-Z.

      Deswegen ist der selbst aufgerufene trim die richtige Lösung.

      Gut, dass ich das mal nachgefragt habe. Danke für die Bsetätigung, ich hab den trim() gleich eingebaut.

      Jörg

  2. Hallo Jörg,

    $Variable = mysqli_real_escape_string($link,$Variable);
    

    sollte doch beim Einfügen in die db alle Leerzeichen und Zeilenumbrüche am Strigende entfernen oder habe ich das missverstanden?

    keine Ahnung, wer dir das weismachen wollte - nein, das ist nicht so. Die Funktion mysqli_real_escape_string() soll nur Zeichen maskieren, die in einem SQL-Statement eine besondere Bedeutung haben.

    Irgendwie habe ich den Eindruck, dass nur

    $Variable = mysqli_real_escape_string($link,trim($Variable));
    

    das wirklich macht.

    Ja, richtig. trim() entfernt Whitespace (z.B. Leerzeichen und Zeilenumbrüche) am Anfang und am Ende eines Strings.

    Live long and pros healthy,
     Martin

    --
    Ich bin subfontanell spärlich möbliert. - (Kommentar eines Kandidaten der Quiz-Show "Gefragt, Gejagt" zu seinen eigenen geistigen Leistungen)
    1. Hi Martin,

      keine Ahnung, wer dir das weismachen wollte - nein, das ist nicht so. Die Funktion mysqli_real_escape_string() soll nur Zeichen maskieren, die in einem SQL-Statement eine besondere Bedeutung haben.

      Weiß auch nicht, hab mich echt verlesen.

      Ja, richtig. trim() entfernt Whitespace (z.B. Leerzeichen und Zeilenumbrüche) am Anfang und am Ende eines Strings.

      Auch an Dich nochmal danke für die Bestätigung.

      Jörg

  3. Da es im Titel steht...

    TRIM() gibt es auch in MySQL/MariaDB. Tut leider nicht wie in PHP:

    select trim("
             text
    ") as txt;
    +-----------------+
    | txt             |
    +-----------------+
    | 
             text
     |
    +-----------------+
    1 row in set (0.000 sec)
    

    trim() kann quasi nur Leerzeichen. Hm. Dann eben mit Regex:

    Probierte Lösung:

    USE test;
    CREATE FUNCTION myTrim (s CHAR(255))
    RETURNS CHAR(255)
    RETURN(
        REGEXP_REPLACE(
            REGEXP_REPLACE(
                s,
                "[\r\n\t ]+$",
                ''
            ),
            "^[\r\n\t ]+",
            ''
        )
    );
    
    
    Query OK, 0 rows affected (0.022 sec)
    
    
    MariaDB [test]> select myTrim("
             text
    ") as txt;
    +------+
    | txt  |
    +------+
    | text |
    +------+
    1 row in set (0.000 sec)
    

    Die jetzt noch zu sehenden Leerzeichen wurden NUR für die Ausgabe in der Konsole eingefügt, sind nicht in Ergebnissets.