Absätze im Text mit <p></p> einfassen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Absätze im Text mit <p></p> einfassen

    Ich stehe total auf dem schlauch, ich möchte in einem String/Text Absätze in <p></p> einfassen.

    zb.

    HTML Code:
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 
    incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.<br /><br />
    Quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipisicing elit.
    in

    HTML Code:
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 
    incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.</p>
    
    <p>Quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
    Kann mir jemand das preg_replace oder anderen Lösungsansatz dazu Bitte geben. Bekomm es nicht hin.

  • #2
    String mit split aufteilen und dann für jedes Element ein <p> an den Anfang und ein </p> ans Ende.

    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Comment


    • #3
      Jut habe ich:

      HTML Code:
      $str = absatz(split("[\n\n]", $str));
      
      function absatz($string) {	
       foreach($string as $val) {
        trim($val);
        if(!empty($val)) {
         echo "<p>".$val."</p>\n\n";
        }
       }
      }
      Habe nur das Problem das er mir immer wieder ein leeres <p></p> reinhaut und kann es mit nur nicht erklären. Was mach ich falsch?

      Comment


      • #4
        PHP Code:
        $str absatz(split("[\n\n]"$str));
        ...
        foreach(
        $string as $val
        Du solltest dich schon entscheiden. $str oder $string.

        Peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Comment


        • #5
          Originally posted by Kropff View Post
          PHP Code:
          $str absatz(split("[\n\n]"$str));
          ...
          foreach(
          $string as $val
          Du solltest dich schon entscheiden. $str oder $string.

          Peter
          Ist nicht wirklich das Problem, kommt nur weil ich das split in einer anderen Funktion habe.

          Comment


          • #6
            Ich habs, mal am Regulären Ausdruck gearbeitet (wie ich den Mist hasse)

            $str = absatz(split("\r\n|\n|\r", $str));

            Comment


            • #7
              Hallo,

              die Funktion trim arbeitet nicht so wie du denkst. Die ändert den String nicht, sondern gibt einen neuen zurück.

              Probier's mal so:

              PHP Code:
              $str absatz(split("[\n\n]"$str));

              function 
              absatz($string) {    
               foreach(
              $string as $val) {
                if(!
              trim($val)) {
                 echo 
              "<p>".$val."</p>\n\n";
                }
               }

              Gruß,

              Amica
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Comment


              • #8
                Originally posted by Frashier View Post
                Jut habe ich:

                HTML Code:
                ...
                trim($val);
                  if(!empty($val)) {
                   echo "<p>".$val."</p>\n\n";
                  }
                ...
                Habe nur das Problem das er mir immer wieder ein leeres <p></p> reinhaut und kann es mit nur nicht erklären. Was mach ich falsch?
                Eine Zeichenkette prüft man mit !isset($string[0]) und nicht mit empty($string) auf "Leere".

                Aber das ist nicht das eigentliche Problem.
                "Leere" Zeilen würde ich so ausschließen:

                PHP Code:
                foreach () {
                  
                // ...
                  
                if (preg_match('/\A\s*\z/'$val)) {
                    continue;
                  }
                  
                // ...

                Und wenn man einmal dabei ist, könnte man das ganze Problem vielleicht auch simpler lösen:

                PHP Code:
                function paragraph($string) {
                  return 
                '<p>' preg_replace('/(?:\r\n|[\r\n]){2,}/''</p><p>'$string) . '</p>';

                Für schöneren HTML-Quelltext musst du notfalls noch ein paar Zeilenumbrüche im Ersetzen-String einfügen.
                Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                Comment


                • #9
                  Originally posted by fireweasel View Post
                  Eine Zeichenkette prüft man mit !isset($string[0]) und nicht mit empty($string) auf "Leere".
                  Wer sagt das denn außer dir?

                  Gruß,

                  Amica
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Comment


                  • #10
                    Originally posted by AmicaNoctis View Post
                    Originally posted by fireweasel View Post
                    Eine Zeichenkette prüft man mit !isset($string[0]) und nicht mit empty($string) auf "Leere".
                    Wer sagt das denn außer dir?
                    Hab mich auch erst gewundert - aber ich vermute, damit will fireweasel umgehen, dass auch "0" von empty als leer erkannt würde.
                    Quasi eine leicht "geekigere" Variante von isset($string) && $string !== ""
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Comment


                    • #11
                      Ah ja, danke, da find ich aber !strlen($string) trotzdem noch kürzer und intuitiver. Es könnte zwar im Allgemeinen zu ner Warnung führen, aber innerhalb von foreach (wie im Fall des Fragestellers) kann das ja nicht passieren.
                      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                      Super, danke!
                      [/COLOR]

                      Comment


                      • #12
                        PHP Code:
                        $str preg_replace("%(<br />)([\s]*?)(<br />)%si""</p><p>"$str);
                        $str "<p>".$str."</p>"
                        h.a.n.d.
                        Schmalle

                        http://impressed.by
                        http://blog.schmalenberger.it



                        Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
                        ... nur ohne :-)

                        Comment


                        • #13
                          Wer sagt das denn außer dir?
                          Alle die, die schlauer sind als ich (z.B. der hier). Das ist ganz sicher nicht auf meinem Mist gewachsen.

                          Originally posted by AmicaNoctis View Post
                          Ah ja, danke, da find ich aber !strlen($string) trotzdem noch kürzer und intuitiver.
                          Die Betonung sollte nicht auf der Verwendung von !isset($string[0]) liegen, sondern auf der NICHTverwendung von empty(), dessen Bezeichnung IMHO falsch gewählt ist. Sowas wie yields_to_false() würde besser passen ...

                          Für PHP-Verhältnisse ist !strlen($string) sicher die "intuitivste" Variante. Ich hätte lieber sowas wie $string->is_empty() oder notfalls eben is_empty($string) und als Rückgabewert TRUE für leere Strings und nichtexistierende Variablennamen. Muss man sich selber basteln.

                          Originally posted by wahsaga View Post
                          ...
                          Quasi eine leicht "geekigere" Variante von isset($string) && $string !== ""
                          Geekig? Ich verwende diese Schreibweise schon so lange, dass ich mich nicht mehr daran erinnern kann, warum ich mir sie angewöhnt hatte. Ich befürchte fast, es war aus Gründen der bösen, bösen Mikrooptimierung.
                          "... it's about 33% faster" sagt doch eigentlich schon alles.
                          Last edited by fireweasel; 25-09-2009, 14:58.
                          Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                          Comment

                          Working...
                          X