auto Zeilenumbruch nach width

  • Sry Leute ...
    klingt evtl. verdammt blöd aber ich bekomms grad nicht hin!^^
    Ich habe ein input Feld bei dem Text (Nachricht) eigegeben werden kann. *klapt*
    So nun sind nicht alle User so freundlich und machen z.B. aller 250 Zeichen einen Zeilenumbruch. ;)
    Aber beim Ausgeben des Feldes habe ich nur 500px breite zur verfügung alles drüber hinaus wird "verschluckt".

    Ich habe es schon mit width in span, div, ... probiert aber das juckt den Text irgendwie garnicht.
    Hat jemand eine Idee wie ich bevor die width überschritten wird ein Zeilenumbruch hin bekomme?
    Ich habe das ungute Gefühl das es an meinem white-space Befehl liegt aber wenn ich den änder zerstört es mir die ganze Seite.

    css Teil:

    Code
    .xr_tl {position: absolute; white-space: pre; unicode-bidi:bidi-override;}
    .xr_s0 {font-family:Arial;font-size:12px;font-weight:bold;font-style:normal;text-decoration:none;color:#FFFFFF;letter-spacing:0.0em;}
    .xr_s5 {font-family:Arial;font-size:10px;font-weight:normal;font-style:normal;text-decoration:none;color:#000000;letter-spacing:0.0em;}

    php Code:

    PHP
    echo '<span class="xr_s0" style="position: absolute; left:50%; top:'.$abstand.'px; margin-left: -260px;">';
    echo '[...]';
    echo '<span class="xr_tl xr_s5" style="top: 65px; width: 450px;">'.$inhalt.'</span>';
    echo '[...]';
    echo '</span>';
  • du kannst das entweder mit JS machen, was aber,. acuh wenn der benutzer JS hat, benutzerunfreundlich ist. Daher würde ichda smit PHP machen:

    PHP
    $text=str_replace("\n", "", $_POST['meineTextarea']);
    $text2="";
    while (!empty($text)) {
        $text2.=substr($text, 0, 250)."<br>";
        $text=substr($text, 250);
    }


    $text2 enthält dann den geparsten string.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • du kannst das entweder mit JS machen, was aber,. acuh wenn der benutzer JS hat, benutzerunfreundlich ist. Daher würde ichda smit PHP machen:

    PHP
    $text=str_replace("\n", "", $_POST['meineTextarea']);
    $text2="";
    while (!empty($text)) {
        $text2.=substr($text, 0, 250)."<br>";
        $text=substr($text, 250);
    }


    $text2 enthält dann den geparsten string.

    So also ich habe es mal getestet. Es funktioniert auch aber ich habe das Problem das er nach genau x Zeichen umbricht.
    Habe schon hier: http://php.net/manual/de/function.substr.php
    geschaut aber nichts gefunden wie man dem erklärt nur vor oder nach einer zusammenhängenden Zeichenkette!

    Gibt es da irgendetwas???

  • Nein. PHP kann nicht wissen, wie breit dein text ist. Du kannst nur rausfinden wie viele Zeichen da sind (weshalb Tobses Vorschlag mal wieder unbrauchbar ist). Könntest dir eine vordefinierte Breite für jeden Buchstaben bei deiner Schriftart notieren - was allerdings immernoch murks ist. Z.b. stellt der MAC die Schriftarten anders dar als ein Win- PC.

    Bei einer festgelegten Breite in einem Element wird der Zeilenumbruch automatisch durchgeführt (außer man sagt eindeutig, dass es keine geben soll). Weshalb ich jetzt das Problem nicht versteh %).
    white-space: pre;
    ist schonmal totaler murks.

    Zitat


    pre
    Zeilenumbrüche und Leerzeichen werden, vergleichbar mit dem HTML-Element<pre>, so dargestellt, wie sie im Quellcode eingegeben sind


    Überleg dir was anderes.... Links und Rechts gleichzeitig geht nunmal nicht.

  • Richtig Dodo, wie gesagt... Je nach OS haben die Schriftarten unterschiedliche Darstellung. Beispiel:
    Lucia Grande ist auf dem MAC wie Lucia Grande Bold auf dem PC. Total unzuverlässig - man könnte zwar mit einem Puffer arbeiten, aber "pre" ist einfach nur murks in dem Fall...

    Solange die Funktion nicht beim User abfragen kann wie viel Platz der Text einnimmt, ist sowas nur ne (mistige) Notlösung. Dieses Feature wirds (hoffentlich) nie geben. Würde höhstens funktionieren, wenn du dem User genau deine Schriftart vor die Nase setzt (was nicht gerade einfach ist).

  • Kurze Nebenfrage:

    Warum machst du nicht einfach per CSS ein overflow:hidden; oder overflow:scroll; in den Container für den Text?
    Der User ist doch selbst Schuld, wenn er 150 Zeichen ohne Whitespaces macht. Wirds halt nicht angezeigt, oder man muss scrollen bei dem einen Beitrag.

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Bei einer festgelegten Breite in einem Element wird der Zeilenumbruch automatisch durchgeführt (außer man sagt eindeutig, dass es keine geben soll). Weshalb ich jetzt das Problem nicht versteh %).
    white-space: pre;
    ist schonmal totaler murks.

    Ich habe doch gesagt das ich grad bissel bescheuert bin!^^ :lol:
    Habs jetzt auf white-space: pre-wrap; geändert und siehe da es geht! :idea:
    Danke ...

    Aber nachdem ich mitlerweile seit knapp 1Woche am Stück mit paar wenigen Stunden schlaf Scripte weil ich die Community bis zu meim Urlaub fertig haben will komm ich nimehr wirklich auf solche "klein" Dinge! SRY ...

    Aber die php-Scripts rauben mir schon genug Nerven. ;)

    MfG

    Kurze Nebenfrage:

    Warum machst du nicht einfach per CSS ein overflow:hidden; oder overflow:scroll; in den Container für den Text?
    Der User ist doch selbst Schuld, wenn er 150 Zeichen ohne Whitespaces macht. Wirds halt nicht angezeigt, oder man muss scrollen bei dem einen Beitrag.

    Ich habe grad beides kombiniert!

    Code
    .xr_tl_inhalt {position: absolute; white-space: pre-wrap; unicode-bidi:bidi-override; overflow:scroll;}
    PHP
    echo '<span class="xr_tl_inhalt xr_s5" style="top: 65px; width: 485px; height: 120px;">'.$inhalt.'</span>';
  • ... (weshalb Tobses Vorschlag mal wieder unbrauchbar ist)...


    Wo ist eigentlich dein problem? Er wollte nach 250 Zeichen nen zeilenumbruch und nur weil du ne andere Idee hast, ist meine Lösung jetzt unbrauchbar oder was?
    http://php.net/manual/de/function.wordwrap.php damit müsste sich das erledigt haben.
    EDIT: Oder eben mit CSS.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!