bei textausgabe in <textarea> werden <br />-tags mit ausgegeben
daniel
- php
0 Fabian Transchel0 David0 Lemmy Danger0 daniel
0 Phil0 Sönke Tesch
hallo alle zusammen und schönen sonntag,
ich habe mal eine frage.
ich habe einen text in einer datenbank stehen.
den lasse ich mit echo nl2br(stripshlashes($row['text'])); ausgeben.
alles wunderbar wie es sein soll, zeilenunmbrüche gehen, sonderzeichen werden ausgegeben, anfürhrungstriche nicht irgendwie maskiert. super.
wenn ich jetzt aber genau dasselbe in eine <textarea> ausgebe, kommt da ziemlicher murks bei raus, sprich ich habe auf einmal <br /> tags und sowas drinnestehen??
konkret sieht das so aus:
<textarea name="adv_text" rows="7" cols="50" maxlength="500">
<?php echo nl2br(stripslashes($rs['text']));?>
</textarea>
so, und da tauchen jetzt immer mal <br /> -tags im textfeld auf.
wenn ich direkt dahinter den text mit
<?php echo nl2br(stripslashes($rs['text']));?>
ausgebe (also "direkt auf die seite",nicht in einem textfeld) wird er einwandfrei angezeigt ??
hat jemand eine idee , woran das liegt?
ich werd da nicht so recht schlau draus...??
grüße,
daniel
Hi
wenn ich jetzt aber genau dasselbe in eine <textarea> ausgebe, kommt da ziemlicher murks bei raus, sprich ich habe auf einmal <br /> tags und sowas drinnestehen??
Natürlich, denn <textarea> interpretiert _keinerlei_ HTML-Code, also auch nicht <br />, die somit angezeigt werden, fertig.
In einem <textarea> verwende nicht nl2br(), das ist total unsinnig.
Fabian
Hallo Fabian,
Natürlich, denn <textarea> interpretiert _keinerlei_ HTML-Code, also auch nicht <br />, die somit angezeigt werden, fertig.
In XHTML ist der Inhalt von Textareas als (#PCDATA) definiert [1]. Das heißt, dass Tags die eventuell darin vorkommen eigentlich ausgewertet werden sollten. Der Validator macht das auch richtig und gibt eine Fehlermeldung aus, wenn er ein <br /> in einer Textarea findet, da dieses ja nicht erlaubt ist. Seltsamerweise misachten diese Regel aber alle Browser, die ich getestet habe und zeigen das <br /> auch bei gesetzter XML-Deklaration im Text an.
Oder habe ich die Spezifikation falsch verstanden?
[1] http://www.w3.org/TR/xhtml1/dtds.html#dtdentry_xhtml1-strict.dtd_textarea
verwirrte Grüße,
Robert
Hi Robert,
Natürlich, denn <textarea> interpretiert _keinerlei_ HTML-Code, also auch nicht <br />, die somit angezeigt werden, fertig.
In XHTML ist der Inhalt von Textareas als (#PCDATA) definiert [1]. Das heißt, dass Tags die eventuell darin vorkommen eigentlich ausgewertet werden sollten. Der Validator macht das auch richtig und gibt eine Fehlermeldung aus, wenn er ein <br /> in einer Textarea findet, da dieses ja nicht erlaubt ist. Seltsamerweise misachten diese Regel aber alle Browser, die ich getestet habe und zeigen das <br /> auch bei gesetzter XML-Deklaration im Text an.Oder habe ich die Spezifikation falsch verstanden?
Nein, ich denke, du hast sie ganz richtig verstanden. (Auch, wenn ich mich _meinerseits_ frage, warum Tags in <teaxtarea> geparst werden sollten...)
Allerdings haben sowohl Browser, als auch Validator gewisse Probleme mit XML, und u.U. auch XHTML, beim Validator steht das auch explizit dabei:
"Note: The Validator XML support has some limitations."[1]
Das legt nahe, dass ein etwas (IMHO) doch "ausgefalleneres" Feature wie <br /> in Textareas (noch) nicht korrekt implementiert ist.
Fabian
[1] http://openjade.sf.net/doc/xml.htm
Hallo
wenn ich direkt dahinter den text mit
<?php echo nl2br(stripslashes($rs['text']));?>
hat jemand eine idee , woran das liegt?
ich werd da nicht so recht schlau draus...??
Solltest du aber. Wie machst du denn Zeilenumbrüche in einer Textarea? Nicht durch ein <br />, oder? Du drückst da immer Return, sprich erzeugst ein \n.
nimm also hier bei der Ausgabe das nl2br() weg und es ist wie du es haben möchtest...
Grüße
David
Ei guude wie?
<textarea name="adv_text" rows="7" cols="50" maxlength="500">
<?php echo nl2br(stripslashes($rs['text']));?>
</textarea>
Naja, ist doch kein Wunder, wenn Du die "normalen" Zeilenumbrüche durch <br>s ersetzen lässt... Kennst Du überhaupt die Aufgabe der Funktion nl2br()? Nein? Dann schau hier mal nach: http://www.php.net/manual/de/function.nl2br.php
LG ausm Hesseland
Lemmy
ohmann....
stimmt ;-)
ich muß zugeben, so klar das eigentlich auch sein sollte,
da wär ich allein so schnell nicht drauf gekommen....
funktioniert einwandfrei jetzt .
danke !!!!
grüße,
daniel
Hi!
Ein Textfeld ist kein HTML-Feld.
In HTML ist ein Zeilenumbruch <br />, auf Textversion ist es hingegen \r\n.
Also musst alle <br /> mit \r\n ersetzen :) oder du nimmst gleich htmlspecialchars() und wandelst erst gar nicht die Zelienumbrüche aus der DB in <br /> um.
CU
http://www.yubb.de
wenn ich jetzt aber genau dasselbe in eine <textarea> ausgebe, kommt da ziemlicher murks bei raus, sprich ich habe auf einmal <br /> tags und sowas drinnestehen??
<textarea name="adv_text" rows="7" cols="50" maxlength="500">
<?php echo nl2br(stripslashes($rs['text']));?>
</textarea>
In einem <textarea>-Block kannst Du kein HTML verwenden. Deshalb gehören da auch keine <br> rein, sondern einfache Text-Zeilenumbrüche.
BTW: Überlege Dir vielleicht, magic_quotes_gpc auszuschalten. Oben bringen die Schrägstriche sowieso nichts (weshalb Du sie auch wieder mit stripslashes() rausnehmen mußt, nachdem PHP sie mühselig reingesetzt hat) und die Fälle, in denen sie benötigt werden, kommen in der Regel seltener vor (z.B. MySQL, mysql_escape_string()).
Was Du hingegen dummerweise vergessen hast, ist htmlentities() (hat mit stripslashes() absolut gar nichts zu tun). Steht in $rs["text"] HTML-Code drin (möglicherweise auch noch mit <script>- oder <style>-Blöcken), zerlegt es Dir unter Umständen Deine Seite.
Gruß,
soenk.e