Zeilenumbrüche innerhalb von <ul>'s entfernen

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

  • Zeilenumbrüche innerhalb von <ul>'s entfernen

    Hallo, bräuchte mal Hilfe!

    ich habe folgenden Fließtext:
    HTML-Code:
    Text, viel Texte<br>
    <ul><br>
    <li>www</li><br>
    <li>aaa</li><br>
    <li>bbbb</li><br>
    </ul><br>
    Text, viel Texte<br>
    bla
    Dieses Problem ist durch die "nl2br"-Funktion "entstanden".
    Gibt es eine Möglichkeit, alle <br>'s innerhalb von <ul>'s zu entfernen:
    (analog <ol>'s)

    Gewünschtes Ergebnis:

    HTML-Code:
    Text, viel Texte<br>
    <ul>
    <li>www</li>
    <li>aaa</li>
    <li>bbbb</li>
    </ul><br>
    Text, viel Texte<br>
    bla
    Danke für einen Tipp!
    Oder Lösungsansatz!

  • #2
    Wieso wendest du überhaupt nl2br() auf HTML an?
    Das ist doch irgendwie... nunja.... zumindest komisch.
    Wir werden alle sterben

    Kommentar


    • #3
      PHP-Code:
      $text 'Text, viel Texte<br>
      <ul><br>
      <li>www</li><br>
      <li>aaa</li><br>
      <li>bbbb</li><br>
      </ul><br>
      Text, viel Texte<br>
      bla'
      ;
      $neu_text str_replace ('</li><br>''</li>'$text); 
      z.b.

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

      Kommentar


      • #4
        Du solltest vor dem nl2br() alle Newlines zwischen HTML-Tags entfernen. Dann entstehen diese BRs gar nicht erst.

        Kommentar


        • #5
          @all: Danke für die Tipps!
          @onemorenerd: Vorher alle HTML-Tags von \n befreien: Aber wie?

          Kommentar


          • #6
            PHP-Code:
            $text str_replace(">\n<"'><'$text); 
            Das wäre eine Möglichkeit. Die verhindert zwar auch, dass jemand die Zeichen > und < im Text benutzt und einen Zeilenumbruch dazwischen setzt. Aber wer macht schon sowas?
            Ich würde allerdings mit regulären Ausdrücken rangehen (preg_replace()), um Whitespace rund um das \n zu erwischen.
            Wenn du auch zu regulären Ausdrücken greifen willst, kannst du allerdings auch gleich auf nl2br() verzichten und stattdessen mit preg_replace() alle \n ersetzen, die nicht zwischen >< stehen.
            Zuletzt geändert von onemorenerd; 20.05.2009, 12:42.

            Kommentar


            • #7
              Cool, wie sähe das aus?

              Versuch:
              PHP-Code:
              preg_replace('[nicht innerhalb von ><]''\n'$text); 
              Wie kann ich diesen Bereich per RegExp ausschließen?
              Habe leider recht wenig anhung von RegExp's...
              Danke für eine Tip!

              Kommentar


              • #8
                Lies dir mal die User Comment zu nl2br() im Manual durch!

                Kommentar


                • #9
                  Guter Tipp, danke!:
                  PHP-Code:
                  function nl2br_skip_html($string)
                  {
                      
                  // remove any carriage returns (mysql)
                      
                  $string str_replace("\r"''$string);

                      
                  // replace any newlines that aren't preceded by a > with a <br />
                      
                  $string preg_replace('/(?<!>)\n/'"<br />\n"$string);

                      return 
                  $string;

                  Kommentar

                  Lädt...
                  X