nl2br() - str_replace() Problem
tafkat
- php
2 Andavos0 tafkat
0 Ingo Turski
Servus.. ich hab da mal ne kleine sorge und wohl nen denkfehler wie ich glaube..
Arbeite zzt. an ner Option zum Editieren von Beiträgen die in der DB liegen..
Eingetragen wird:
$text = nl2br($text);
Soweit so gut.. . in der DB steht der Text eben immer mit nem <br /> für den Zeilenumbruch..
Jetzt versuch ich jedoch den Text erneut in die Textarea zu laden mit:
$text = str_replace("<br />","n",$text);
jedoch hab ich nun aber statt einem gleich ZWEI Zeilenumbrüche.. .
Woran kann das liegen bzw. was müsste ich ggf. ändern ?
Hallo,
nl2br() ersetzt keine Zeilenumbrüche sondern ergänzt diese diese um <br />. Das \n (\r, \r\n) bleibt weiterhin erhalten.
Allerdings ist es nicht schön, beim Abspeichern diese Veränderungen vorzunehmen, normalerweise macht man dieses erst bei der Ausgabe.
Grüße
Andavos
Das würde bedeuten das ich MIT nl2br() in die Datenbank schreibe jedoch beim auslesen das str_replace() entfallen lass ?
Hab das eben ausprobiert aber so wie ich das wollt haut das immer noch nicht hin.
Hallom
Das würde bedeuten das ich MIT nl2br() in die Datenbank schreibe jedoch beim auslesen das str_replace() entfallen lass ?
nein, es bedeutet, dass du den String in die Datenbank schreibst, *ohne* ihn vorher zu verstümmeln (kontextspezifische Codierung, hier z.B. mit mysql_real_escape_string() natürlich ausgenommen), sondern dass du ihn erst beim Auslesen wieder für den jeweiligen Ausgabekontext aufbereitest.
So long,
Martin
nein, es bedeutet, dass du den String in die Datenbank schreibst, *ohne* ihn vorher zu verstümmeln (kontextspezifische Codierung, hier z.B. mit mysql_real_escape_string() natürlich ausgenommen), sondern dass du ihn erst beim Auslesen wieder für den jeweiligen Ausgabekontext aufbereitest.
Ähm.
Du setzt hier eine DB voraus, die gar nicht angegeben war.
Was, wenn es sich um Zeilen orientierte Datensätze handelt? Aus den Zeiten der langen Fussmärsche durchaus noch bekannte Praxis...
mfg Beat
Versteh immo leider nur Bahnhof.. .
Ist ne MySQL DB und das Feld hat den 'TEXT' Attribut.. .
Also soweit kein Problem.
Zusammenfassung: (Vereinfacht)
Abspeichern des Textes in DB:
$text = $_POST['text'];
INSERT INTO .... (text, ...) VALUES ('$text', ...)
Auslesen des Textes in Textarea:
$text = $row['text'];
$text = str_replace('<br />',' ',$text)
Und nüx geht... . :S
Werd nicht mal aus Tutorials schlau gerade
hi,
Zusammenfassung: (Vereinfacht)
Abspeichern des Textes in DB:
$text = $_POST['text'];
INSERT INTO .... (text, ...) VALUES ('$text', ...)
Nein, in deinem ersten Posting schriebst du
Eingetragen wird:
$text = nl2br($text);
Darauf hin hatte dir Der Martin das für dich relevante Schlüsselwort genannt, mysql_real_escape_string().
Auslesen des Textes in Textarea:
$text = $row['text'];
$text = str_replace('<br />',' ',$text)Und nüx geht... . :S
Werd nicht mal aus Tutorials schlau gerade
Wie schon von allen Vorpostern erwähnt, speichere die Daten von anfang an richtig ab, dann hast du auch keine folge Probleme.
Bei der Ausgabe kannst du dann wieder mit nl2br arbeiten.
grüße
Hello,
Versteh immo leider nur Bahnhof.. .
Ist ne MySQL DB und das Feld hat den 'TEXT' Attribut.. .
Also soweit kein Problem.
Sprechweise: Die Spalte hat den Spaltentyp 'Text' :-)
Zum Wegschreiben von Texten oder auch Bildern in den Datensatz über die SQL-Schnittstelle (= Textschnittstelle) müssen die Daten vorher "escaped" werden. Jedes DBMS hat dafür andere Vorschriften.
Bei MySQL sind es die Zeichen NUL, LF, CR, ", ', , SUB
die in der Schnittstelle Sonnderbedeutung haben, und daher vor der Übergabe an diese "entschärft" werden müssen. Sonst kann die Schnittstelle die Daten nicht sauber an die DB übergeben.
http://dev.mysql.com/doc/refman/5.0/en/mysql-real-escape-string.html
http://de2.php.net/manual/en/function.mysql-real-escape-string.php
http://de.wikipedia.org/wiki/Steuerzeichen
Wenn man mit einem Blockpuffer arbeitet (Prepared Statements), ist diese Behandluhng nicht notwendig, da das System dann ja weiß, welches der Speicherbereich der Daten-Variable ist.
In der Datenbank stehen dann in beiden Fällen nur die reinen Daten. Das Escaping wird von der Schnittstelle beim Eintragen in den Buffer wieder entfernt.
Ein harzliches Glückauf
Tom vom Berg
echo $begrüßung;
Du setzt hier eine DB voraus, die gar nicht angegeben war.
"DB" stand im Ausgangsposting. Das steht im Allgemeinen für eine Datenbank.
Was, wenn es sich um Zeilen orientierte Datensätze handelt?
Auch dann wäre eine Behandlung der Daten für einen ganz anderen Kontext unangebracht. Bei zeilenorientierter Datenhaltung wäre eher ein \n empfehlenswert.
echo "$verabschiedung $name";
Hallo,
Du setzt hier eine DB voraus, die gar nicht angegeben war.
Was, wenn es sich um Zeilen orientierte Datensätze handelt? Aus den Zeiten der langen Fussmärsche durchaus noch bekannte Praxis...
Ergänzent zum Post von deflfix noch zu sagen, dass dann nl2br() nichts bringen würde, da Zeilenumbrüche _nicht_ ersetzt sondern um <br /> ergänzt werden. Zumindest ist die Funktion absolut nutzlos, wenn man z.B. eine Text-Datei hat und pro Zeile 1 Eintrag stehen sollte.
MFG
Andavos
Hi,
Arbeite zzt. an ner Option zum Editieren von Beiträgen die in der DB liegen..
Eingetragen wird:
$text = nl2br($text);Soweit so gut.. . in der DB steht der Text eben immer mit nem <br /> für den Zeilenumbruch..
was eben nicht so gut ist - Du solltest den Text unverfälscht speichern, was solche Folgeprobleme vermeidet.
Jetzt versuch ich jedoch den Text erneut in die Textarea zu laden mit:
$text = str_replace("<br />","n",$text);jedoch hab ich nun aber statt einem gleich ZWEI Zeilenumbrüche.. .
logisch. Die Funktion nl2br() fügt lediglich ein <br /> *hinzu* - mache diesen Unsinn ungeschehen und gut ist. Für's erste also: str_replace('<br />','',$text);
freundliche Grüße
Ingo