Wordwrap nicht in Links

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

  • Wordwrap nicht in Links

    Wie kann ich Wordwrap anwenden, dass es keine Links oder HTML Tags umbricht?

  • #2
    gar nicht - da muss eine eigene Funktion her.

    Eine Variante wäre, den String erst durch strip_tags, dann durch wordwrap zu schicken und anschließend die Tags wieder einfügen,
    Nur wird der letzte Punkt sehr schwierig, da durch wordwrap die Positionen verschoben werden und womöglich nachher die Tags an der falschen Stelle stehen.

    Eine andere Möglichkeit:
    alle Whitespaces suchen: preg_match_all('/\s+/', $str, PREG_SET_ORDER) und in einer Schleife selber nachzählen und trennen.

    In jedem Fall sollten die gleichen Parameter berücksichtig werden wie beim originalen wordwrap; ergo muss der Funktions-Header so aussehen:

    function wordwrap_notags($str, $width=75, $break="\n", $cut=0)
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Re: Wordwrap nicht in Links

      Original geschrieben von Celebi
      Wie kann ich Wordwrap anwenden, dass es keine Links oder HTML Tags umbricht?
      ohne zusätzliche klimmzüge: gar nicht.

      php ist es furzegal, ob in einem string etwas drin steht, dass man in html eventuell als link betrachten könnte, oder nicht.

      lösungsvorschlag: teile deinen string vor der anwendung von wordwrap mit geeigneten stringfunktionen in mehrere kleine strings auf (strings mit reinem text, und strings mit html-tags), und wandle nur die um, die reinen text beinhalten.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Also in etwa so:
        PHP-Code:
        function wordwrap_new($string){
            
        $exp_string=explode(" ",$string);
            foreach(
        $explode_string as $str){
                if(!
        ereg("http://",$str) or !ereg("img src",$str) or !ereg("a href",$str)) $text=wordwrap($text,75,"\n",0);
            }

        Thx for hlp.

        Kommentar


        • #5
          Code:
          echo preg_replace('%([^\s\<\>]{15})%', '\1 ', $str);
          sollte dir dir nicht innerhalb von tags umbrechen
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            EDIT:
            *müllgelaberthab*
            Zuletzt geändert von hibatsu; 19.07.2003, 16:10.

            Kommentar


            • #7
              Also in dem Fall so:

              PHP-Code:
              function wordwrap_new($string){
                  
              $exp_string=explode(" ",$string);
                  foreach(
              $explode_string as $str){
                      
              $str=preg_replace('%([^\s\<\>]{15})%''\1 '$str);
                  }

              ?

              Also d.h., der Text wird in Strings von max 15 Zeichen geteilt?

              Kommentar


              • #8
                hättest du mal bei http://de2.php.net/manual/de/pcre.pattern.syntax.php nachgeschaut (ganz einfach zu erreichen über preg_replace) dann wüsstest du, warum dein exploden hyperfluid is...

                und hättest du's mal probiert und nicht erst gepostet, dann wüsstest du auch, was es mit der 15 auf sich hat...


                isses denn so schwer das zeug einfach zu kopieren?
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  Original geschrieben von mrhappiness
                  isses denn so schwer das zeug einfach zu kopieren?
                  Jo, ich machs lieber selbst

                  Gibts eigentlich sowas wie str_replace_once oder preg_replace_once (ja, ich hab im Maual geschaut und nix gefunden, also gibts sowas wahrscheinlich au net)?

                  Kommentar


                  • #10
                    Hm, net grad der gewünschte Effekt:

                    Code:
                    <?php
                    $str="DasaistasjaasdwiedersdfmalasdfFETT!!!asd <a href=\"index.php?id=a&amp;action=register\">ASDF</a>";
                    echo preg_replace('%([^\s\<\>]{15})%', '\1 ', $str);
                    ?>
                    Ergebnis:

                    Code:
                    Dasaistasjaasdw iedersdfmalasdf FETT!!!asd <a href="index.php ?id=a&amp;actio n=register">ASDF</a>

                    Kommentar


                    • #11
                      Code:
                      preg_replace('%([^\s<(.*)>]{15})%', '\1 ', $str);
                      So habis jetzt, abe es klappt net ganz:

                      Code:
                      <a href="index.php?id=a&amp;ac tion=register">ASDF</a>

                      Kommentar


                      • #12
                        *push*

                        Kommentar


                        • #13
                          Code:
                          $str='<a href="index.php?id=a&action=register">ASDF</a>';
                          $neu=preg_replace('%([^\s<(.*)>]{15})%U', '$1 ', $str);
                          echo $neu;
                          das geht bei mir


                          Original geschrieben von Celebi
                          Jo, ich machs lieber selbst
                          an und für sich löblich, aber codebeispiele sollte mandennoch ausprobieren
                          Gibts eigentlich sowas wie [...] preg_replace_once (ja, ich hab im Maual geschaut und nix gefunden, also gibts sowas wahrscheinlich au net)?
                          im manual gesucht?
                          bei preg_replace?
                          eher nicht oder?
                          die php-jungens und ihre Beschreibung von preg_replace
                          mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])

                          Searches subject for matches to pattern and replaces them with replacement. If limit is specified, then only limit matches will be replaced; if limit is omitted or is -1, then all matches are replaced.
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar


                          • #14
                            Wenn ich deinen Code (1 zu 1 kopiert) anwende, so bekomme ich das im Quelltext o_O:

                            Code:
                            <a href="index.php?id=a&action =register">ASDF</a>
                            Liegts an der PHP Version?
                            Hab 4.1.1.

                            Kommentar

                            Lädt...
                            X