han: mehrere leerzeichen durch  

Hi,

möchte bei Usereingaben, alles was mehr als 2 leerzeichen in folge sind zumindest bis auf 1 durch   ersetzen.

Wie kann ich nach mindetsens 2 aufeinander folgenden leerzeichen suchen?
also eines soll nich umgewandelt werden nur 2 oder mehr...

gruß

  1. Hallo

    also eines soll nich umgewandelt werden nur 2 oder mehr...

    hmm... hast wohl auch sadistische User was? =)

    $str = $usereingabe;
    $parts = explode(' ', $str);
    $output = $parts[0];
    for ($i=1;$i<count($parts);$i++) {
     if (strlen($parts[$i])) {
      $output = $output . ' ' . $parts[$i];};};

    Kleiner Umweg aber effektiv.

    MfG

    splinter

    1. if (strlen$parts[$i]))

      was ist das denn?

      1. if (strlen$parts[$i]))

        was ist das denn?

        Nehmen wir mal an: $str = 'hallo liebes  Internet';
        explode trennt $str bei ALLEN Leerschlägen und löscht diese.
        Das heisst:
        $parts[0] = 'hallo'
        $parts[1] = 'liebes'
        $parts[2] = ''
        $parts[3] = 'Internet'

        Wie du siehst ist in $parts[2] nichts, wäre ja auch nicht schlimm wenn wir in der for-Schlaufe nicht nach jedem $parts ein Leerzeichen einfügen würden.

        strlen zählt die Anzahl Zeichen im Part der gerade eingefügt werden soll. Ist diese Anzahl Null (also false) wird dieser Eintrag ignoriert da das Script sonst wieder 2 Leerschläge nacheinander Schreiben würde (also hätten wir wieder die Ursprüngliche Usereingabe)

      2. Hallo,

        if (strlen$parts[$i]))
        was ist das denn?

        eine vergessene öffnende Klammer, was sonst? ;-)

        So long,
         Martin

        --
        F: Was sagt die kleine Kerze zur großen Kerze?
        A: Ich gehe heute nacht aus!
        1. if (strlen$parts[$i]))
          was ist das denn?

          eine vergessene öffnende Klammer, was sonst? ;-)

          Die allerdings nicht in meinem Beispiel steht.
          Wieso also kleinlich sein, wir wissen ja alle was gemeint ist.
          :-)

  2. Hi,

    bin auf ne Lösng gekommen.
    dachet eigtl eher an sowas:

    while(strstr($text,'  ')) {
        $text=str_replace('  ',' &nbsp;',$text);
        }

    Damit die vielen eingegebenen Leerzeichen auch angezeigt werden, z.B. für einrückungen oder sonstige User-Scherze...

    kann man das optimieren...

    1. Hi,

      bin auf ne Lösng gekommen.
      dachet eigtl eher an sowas:

      while(strstr($text,'  ')) {
          $text=str_replace('  ',' &nbsp;',$text);
          }

      Damit die vielen eingegebenen Leerzeichen auch angezeigt werden, z.B. für einrückungen oder sonstige User-Scherze...

      kann man das optimieren...

      <pre></pre> oder per css mit white-space: pre; verwenden?

      Janine :-)

  3. Hallo,

    Wie kann ich nach mindetsens 2 aufeinander folgenden leerzeichen suchen?
    also eines soll nich umgewandelt werden nur 2 oder mehr...

    $text = preg_replace_callback ('/( +) /', create_function ('$matches', 'return str_repeat ("&nbsp;", strlen ($matches[1]))." ";'), $text);

    Der Code reagiert wie folgt:
     * Ein Leerzeichen: wird stehen gelassen (Ausdruck greift nicht)
     * n aufeinanderfolgende Leerzeichen: die ersten (n-1) Leerzeichen werden
       durch &nbsp; ersetzt, das letzte Leerzeichen bleibt stehen

    Das hat den Vorteil, dass es bei mehreren Leerzeichen durchaus noch möglich ist, dass dort ein Umbruch stattfindet (d.h. wenn jemand "a  b" schreibt, kann dazwischen noch umgebrochen werden), allerdings sind alle eingegebenen Leerzeichen auch später im Browser sichtbar. Man sollte - wie hier - das letzte Leerzeichen als normales Leerzeichen stehen lassen, denn wenn man das erste Leerzeichen als normales Leerzeichen stehen lässt, dann wird dort umgebrochen und die nächste Zeile fängt eingerückt an, was unschön ist.

    Viele Grüße,
    Christian

    --
    "I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup