Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeilenumbruch in <p> Tag ersetzen durch <br>

Einklappen

Neue Werbung 2019

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

  • HimDa
    hat ein Thema erstellt Zeilenumbruch in <p> Tag ersetzen durch <br>.

    Zeilenumbruch in <p> Tag ersetzen durch <br>

    Hallo zusammen,

    ich möchte in einem HTML String mittels PHP die Zeilenumbrüche mit <br> ersetzen
    HTML-Code:
    <h1>Testüberschrift1</h1>
    <p>Text text
    </p><p class='test'>anfang
    ende</p>
    <h1>Testüberschrift2</h1>
    <p>anfang
    mitte
    ende</p>
    und daraus soll folgendes werden:

    HTML-Code:
    <h1>Testüberschrift1</h1>
    <p>Text text<br></p>
    <p class='test'>anfang<br>ende</p>
    <h1>Testüberschrift2</h1>
    <p>anfang<br>mitte<br>ende</p>
    hab es mal mit folgendem probiert komm aber nicht weiter

    PHP-Code:
    preg_replace('/(<p[^>][I]>)(.[/I])(\n)(.*)(</p>)/''\1\2<br>\4\5'$html_string); 
    er beachtet die <p> mit zwei Umbrüchen nicht, folgendes ist mein momentanes Ergebnis

    HTML-Code:
    <h1>Testüberschrift1</h1>
    <p>Text text<br></p>
    <p class='test'>anfang<br>ende</p>
    <h1>Testüberschrift2</h1>
    <p>anfang
    mitte
    ende</p>
    Mir ist klar das meine Filtereinstellungen so nur einen Zeilenumbruch beachten, weiß aber nicht wie ich es ändern soll damit es korrekt funktioniert.

    Hab mich dann durch diverse Foren gesucht/gekämpft dabei ist folgendes herausgekommen:
    PHP-Code:
    $text_roh '
    <h1>Testüberschrift1</h1>
    <p>Text text
    </p><p class='
    test'>anfang
    ende</p>
    <h1>Testüberschrift2</h1>
    <p>anfang
    mitte
    ende</p>
    '
    ;

    // Umbrüche vereinheitlichen
    $text_roh str_replace(["\r\n""\r"], "\n"$text_roh);

    $dom = new DOMDocument;
    $dom->loadHTML($text_roh);
    $nodes $dom->getElementsByTagName('p');

    foreach (
    $nodes as $node) {

    $new_text = new DOMText(str_replace("\n""<br>"$node->textContent));
    $node->removeChild($node->firstChild);
    $node->appendChild($new_text);

    }

    echo 
    $dom->saveHTML(); 
    Hier wird das <br> Tag nicht verarbeitet sonder im Browser als Text ausgegeben und Sonderzeichen und Umlaute kommen kryptisch (ü wird als ü ausgegeben)

    Könnte einen Denkanstoß gebrauchen.

    Danke schon mal im Voraus für eure Hilfe
    VG HimDa

  • marie123
    antwortet
    Zitat von HimDa Beitrag anzeigen
    Hallo zusammen,

    ich möchte in einem HTML String mittels PHP die Zeilenumbrüche mit <br> ersetzen
    HTML-Code:
    <h1>Testüberschrift1</h1>
    <p>Text text
    </p><p class='test'>anfang
    ende</p>
    <h1>Testüberschrift2</h1>
    <p>anfang
    mitte
    ende</p>
    ...

    $new_text = new DOMText(str_replace("\n", "<br>", $node->textContent));
    $node->removeChild($node->firstChild);
    $node->appendChild($new_text);

    }

    echo $dom->saveHTML();[/PHP]

    Hier wird das <br> Tag nicht verarbeitet sonder im Browser als Text ausgegeben und Sonderzeichen und Umlaute kommen kryptisch (ü wird als ü ausgegeben)

    Könnte einen Denkanstoß gebrauchen.

    Danke schon mal im Voraus für eure Hilfe
    VG HimDa
    Ich frage mich, was du damit bezwecken möchtest. Geht es um den Zeilenabstand oder den Abstand zum nächsten Absatz? Sowas regelt man im Normalfall über die entsprechenden CSS-Eigenschaften wie padding und margin. Außerdem hast du ein Problem damit, daß du nicht durchgängig utf8 verwendest.

    Einen Kommentar schreiben:


  • tk1234
    antwortet
    Zitat von HimDa Beitrag anzeigen
    gibt es eine CSS Anweisung welcher für <p> Tags gilt aber innen liegende <ul><li> Tags ausschließt?
    <p> darf kein <ul> enthalten - schau dir mal den erzeugten DOM-Baum an: du wirst feststellen dass der Browser vor <ul> das <p> schließt und <ul> damit kein Kind-Element von <p> mehr ist.

    Einen Kommentar schreiben:


  • hausl
    antwortet
    für <p> Tags gilt aber innen liegende <ul><li> Tags ausschließt
    Du kannst mit sowas
    Code:
    p ul li { }
    bzw.
    Code:
    p li { }
    die ul li innerhalb von p ansprechen und dort den whitespace wieder auf normal setzen ( https://developer.mozilla.org/de/doc...SS/white-space ) .

    Versuch mal. Das sollte aber im CSS nach dem obigen CSS kommen.

    Einen Kommentar schreiben:


  • HimDa
    antwortet
    Hallo hellbringer,

    danke für deine Antwort.
    es hat fast geklappt.

    die Zeilenumbrüche werden in den <p></p> tags gesetzt nur hab ich dort auch <ul><li> Tags dort wird zwischen den <li>tags auch ein zusätzlicher Umbruch gesetzt somit stehen die einzelnen Listenpunkte weit auseinander
    Dies rührt daher das im CMS in Markdown eingegeben wird und der Parser dann entsprechenden HTML erzeugt. Den Parser möchte ich nicht anfassen da sonst das CMS-System nicht mehr updatebar wird, ohne das ich immer wieder eingreifen muss.

    gibt es eine CSS Anweisung welcher für <p> Tags gilt aber innen liegende <ul><li> Tags ausschließt?

    Danke und Gruß
    HimDa

    Einen Kommentar schreiben:


  • hellbringer
    antwortet
    Ich würde das mit CSS und nicht mit PHP lösen:

    Code:
    p.test {
        white-space: pre-line;
    }

    Einen Kommentar schreiben:

Lädt...
X