str_replace() verdoppelt Zeilenumbruch?

  • Themenstarter Themenstarter di-five
  • Beginndatum Beginndatum
D

di-five

Hallo,

ich habe ein Problem mit nl2br. Folgender Text wird in einer Datenbank gespeichert, und anschließend auch wieder ausgelesen:

$beschreibung
Code:
Text<br />
<br />
Text

Jetzt möchte ich aber das <br /> nicht mit ausgegeben haben:
PHP:
$beschreibung = str_replace('<br />', "\n", $db['beschreibung']);

Ausgegeben wird mir jetzt:
Code:
Text



Text

Also zwei Zeilenumbrüche zuviel, woran kann das liegen?

Gruß di-five
 
Speichere die Daten lieber in Rohform in der Datenbank und formatiere sie erst zur Ausgabe.

Das Phänomen der doppelten Zeilenumbruchzeichen ist übrigens, weil die nl2br()-Funktion die Zeilenumbruchzeichen nicht durch HTML-Zeilenumbrüche ersetzt sondern sie ihnen nur voranstellt. Ein „\n“ wird somit zu „<br>\n“. Sonst würden die Daten ja auch alle in einer Zeile stehen.
 
Hi Gumbo,

ich habe das jetzt so gemacht:
PHP:
$beschreibung = str_replace('<br />', '', $db['beschreibung']);

Vielen Dank für deine Antwort! :)

Gruß di-five
 
Ich hoffe, du beherzigst meinen Vorschlag, die Daten in der Rohform in der Datenbank zu speichern und erst für die Ausgabe zu formatieren.
 
Wenn ich die Daten in der Rohform in der Datenbank speicher, also ohne die Zeilenumbrüche, habe ich keine Zeilenumbrüche, wenn ich den Text wieder ausgebe.

Wenn ich die Daten von einem übergebenen Formular in der Datenbank speicher habe ich keine Zeilenumbrüche mit drin.
 
Ja, und das habe ich auch gemacht :)

Beschreibung bearbeiten:
PHP:
    // Beschreibung
    if($pkt_fvg['pkt_id'] == '3' || $pkt_fvg['pkt_id'] == '2' || $pkt_fvg['pkt_id'] == '1')
    {
        echo '          <tr>'                         . "\n";
        echo '            <td>&nbsp;</td>'            . "\n";
        echo '          </tr>'                        . "\n";
        echo '          <tr>'                         . "\n";
        echo '            <td>'                       . "\n";
        echo '              Beschreibung:&nbsp; '     .
                            ' <input type="button" value="B" title="Fett" onClick="insert(\'[ B ]\', \'[ /B ]\')" style="cursor:pointer" />' .
                            ' <input type="button" value="I" title="Kursiv" onClick="insert(\'[ I ]\', \'[ /I ]\')" style="cursor:pointer" />' .
                            ' <input type="button" value="UL" title="Ungeordnete Liste" onClick="insert(\'[UL][LI]\', \'[/LI][/UL]\')" style="cursor:pointer" />' .
                            ' <input type="button" value="OL" title="Geordnete Liste" onClick="insert(\'[OL][LI]\', \'[/LI][/OL]\')" style="cursor:pointer" />' .
                            ' <input type="button" value="LI" title="Listenelement" onClick="insert(\'[LI]\', \'[/LI]\')" style="cursor:pointer" />'   . "\n";
        echo '            </td>'                      . "\n";
        echo '          </tr>'                        . "\n";
        echo '          <tr>'                         . "\n";
        echo '            <td>'                       . "\n";
        echo '              <textarea name="pkt_fvg_beschreibung" cols="50" rows="10">' . $pkt_fvg_beschreibung . '</textarea>' . "\n";
        echo '            </td>'                      . "\n";
        echo '          </tr>'                        . "\n";
    }

Beschreibung in DB speichern:
PHP:
    // Beschreibung umbauen
    $pkt_fvg_beschreibung = nl2br($_POST['pkt_fvg_beschreibung']);

    mysql_query("UPDATE...

Und Beschreibung auf Seite ausgeben:
PHP:
    // Beschreibung anzeigen, falls vorhanden
    if(!$pkt_fvg['pkt_fvg_beschreibung'])
    {
        echo '';
    }
    else
    {
        // Beschreibung bearbeiten
        $pkt_fvg_beschreibung = $pkt_fvg['pkt_fvg_beschreibung'];

        // Fett
        $pkt_fvg_beschreibung = str_replace('[ B ]' , '<strong>' , $pkt_fvg_beschreibung);
        $pkt_fvg_beschreibung = str_replace('[ /B ]', '</strong>', $pkt_fvg_beschreibung);

        // Kursiv
        $pkt_fvg_beschreibung = str_replace('[ I ]' , '<em>' , $pkt_fvg_beschreibung);
        $pkt_fvg_beschreibung = str_replace('[ /I ]', '</em>', $pkt_fvg_beschreibung);

        // Ungeordnete Liste
        $pkt_fvg_beschreibung = str_replace('[UL]' , '<ul>' , $pkt_fvg_beschreibung);
        $pkt_fvg_beschreibung = str_replace('[/UL]', '</ul>', $pkt_fvg_beschreibung);

        // Geordnete Liste
        $pkt_fvg_beschreibung = str_replace('[OL]' , '<ol>' , $pkt_fvg_beschreibung);
        $pkt_fvg_beschreibung = str_replace('[/OL]', '</ol>', $pkt_fvg_beschreibung);

        // Listenelement
        $pkt_fvg_beschreibung = str_replace('[LI]' , '<li>' , $pkt_fvg_beschreibung);
        $pkt_fvg_beschreibung = str_replace('[/LI]', '</li>', $pkt_fvg_beschreibung);

        // Beschreiben ausgeben
        echo '        <tr>' . "\n";
        echo '          <td colspan="2">&nbsp;</td>' . "\n";
        echo '        </tr>' . "\n";
        echo '        <tr>' . "\n";
        echo '          <th colspan="2" align="left">' . "\n";
        echo '            Beschreibung:' . "\n";
        echo '          </th>' . "\n";
        echo '        </tr>' . "\n";
        echo '        <tr>' . "\n";
        echo '          <td colspan="2" align="left">' . "\n";
        echo '            ' . $pkt_fvg_beschreibung . "\n";
        echo '          </td>' . "\n";
        echo '        </tr>' . "\n";
    }

Cool oder? *gg* Ich bin stolz :-)

Das Teil um den Cursor in der Textarea zu positionieren habe ich erst mal bei de.selfhtml.org stibitzt, weil das da für IE, Mozilla und sonstige Browser gescriptet wurde
 
Nein, du formatierst die Daten bereits für die Speicherung in der Datenbank.

Mein Vorschlag sähe so aus:
Die Daten werden in ihrer Rohform in der Datenbank gespeichert:
PHP:
$query = '
	UPDATE
	        `foo`
	  SET
	        `bar` = "'.mysql_real_escape_string($_POST['pkt_fvg_beschreibung']).'"
	';
mysql_query($query);
… und erst zur Ausgabe formatiert:
PHP:
echo nl2br($datensatz['bar']);
 
aah, habe direkt mal auf php.net nachgeguckt, wofür das "mysql_real_escape_string" gut ist.

Eine gute Idee, Danke :)

Werde ich anwenden!

Viele Grüße di-five
 
Zurück