[PHP] Multibyte-taugliches wordwrap?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Zitat von Quetschi Beitrag anzeigen
    Aufgrund des Verfassers des Scripts?
    careful, biatch – du willst doch in den Genuss meiner verbesserten Version kommen, hm?

    Hier noch mal ein Versuch – in linewrap umbenannt, weil die Aufgabe der Funktion wirklich nur noch ist, Text nach x Zeichen umzubrechen, und dabei Original-Zeilenumbrüche beizubehalten. Eventuell vorhandener Whitespace am Ende von Zeilen wird entfernt.
    PHP-Code:
    function linewrap($str$length) {
      
    $breakchar "\n";
      
    $str preg_replace("/(\r\n|\r)/u""\n"$str); // Zeilenumbrüche zu \n vereinheitlichen
      
    $parts preg_split('/(\s+)/u'$str, -1PREG_SPLIT_NO_EMPTY PREG_SPLIT_DELIM_CAPTURE); // split an Whitespace-Zeichen
      
    $return = array(''); 
      for(
    $i=0$line=0$numparts=count($parts); $i<$numparts$i+=2) {
        
    $word $parts[$i];
        
    $space = isset($parts[$i+1]) ? $parts[$i+1] : '';
        
    $newline false;
        if(
    strpos($space"\n") !== false) { // wenn der Space nach dem Wort Zeilenumbrüche enthält, sonstigen Whitespace entfernen
          
    $space preg_replace("/[^\n]/"''$space);
          
    $newline true;
        }
        if(
    mb_strlen($return[$line], 'UTF-8') + mb_strlen($word'UTF-8') <= $length) { 
          
    $return[$line] .= $word $space
        } 
        else {
          
    $return[$line] = rtrim($return[$line]) . $breakchar// unnötigen Whitespace am Zeilenende entfernen, bevor Umbruch hinzugefügt wird
          
    $return[++$line] = $word $space;
        }
        if(
    $newline) { // falls der Space Zeilenumbrüche enthielt, Zeilenzähler weiter setzen
          
    $return[++$line] = '';
        }
      } 
      return 
    rtrim(join(''$return)); 

    Spiel mal damit rum, und sag mir Bescheid, wie es mit realen Daten performt – ob’s noch Schwachstellen hat bei bestimmten Text-Konstallationen, die ich nicht berücksichtigt habe.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #17
      Zitat von wahsaga Beitrag anzeigen
      careful, biatch
      I&#39;m rich biatch! Dave Chapelle (best version) - YouTube

      Ich hab hier eigentlich eher gefragt, ob jemand ein fertiges Scriptchen kennt, dass was taugt - wollt keinem Arbeit machen, daher doppelt danke :-)

      Werde mir es noch ansehen und dir Bescheid geben!
      Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
      Schön - etwas Geschichte kann ja nicht schaden.
      Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

      Kommentar


      • #18
        Die Herausforderung ist Motivation genug :-)

        Btw., was die Funktion noch nicht korrekt handelt, sind überlange Wörter - die landen zwar auf einer eigenen Zeile, werden aber in sich noch nicht umgebrochen … das müsste also noch hinzu gebastelt werden, falls relevant.
        (Z.B. URLs in Mailtexten können ja schon mal die 72-Zeichen-Marke sprengen.)
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #19
          Guten Morgen,

          schaut gut aus, hab bis jetzt kein Fehlverhalten provozieren können.

          Vielen Dank nochmal
          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
          Schön - etwas Geschichte kann ja nicht schaden.
          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

          Kommentar

          Lädt...
          X