Zeilenumbruch aus Textarea wieder ausgeben

Fanatico

Mitglied
Hallo!

Ich habe folgendes Problem.
Bei meiner Edit-Seite besteht die Möglichkeit Text in eine Textarea einzugeben, der dann auch wieder auf der Display Seite, so wie eingegeben, angezeigt werden soll, allerdings ohne Textarea.

Jetzt ist jedoch das Problem, dass ich einen XSL Befehl brauche, der auch die Zeilenumbrüche, die schön brav im XML mitkommen, auf der Seite anzeigt.

Von PHP her weiß ich, dass dies dort mit stripslashes(nl2br($row_spiel['text'])) funktioniert, doch wie mache ich das bei XSL?

Danke schonmal
 
Hi.

Das kannst du mit der xsl:preserve-space Anweisung bewerkstelligen:
XML:
<xsl:preserve-space elements="textarea"/>
Gruß
 
Zuletzt bearbeitet von einem Moderator:
Hallo!

An sich funktioiert das ja schonmal prima.
Muß halt nur noch das HTML Tag pre verwenden, damit die Zeilenumbrüche auch wirklich angezeigt werden.
Allerdings taucht hier das nä. Problem auf.
Und zwar geht es darum, dass der Text auch anhand der Zellenbreite umgebrochen werden soll. Sprich wenn einer in der Textarea einen ewigen langen Text eingibt, der zwar Leerzeichen aber keine von ihm eingegebenen Umbrüche enthält, soll dieser nicht in einer Zeile angezeigt werden und somit die Zelle unnötig in die Länge ziehen, sondern sich schön an der Zellenbreite orientieren und umbrechen.
Lasse ich als pre weg, klappt das auch, aber dann gehen die eingegebenen Umbrüche wieder nicht.
Und wenn ich es mit pre mache, dann isses genau umgekehrt.
Es müßte aber beides funktionieren. :-(
 
Dann musst du tatsächlich die Zeilenumbrüche durch <br> Tags ersetzen:
XML:
<xsl:template name="nl2br">
  <xsl:param name="text"/>
  <xsl:choose>
    <xsl:when test="contains($text, '<newline>')">
      <xsl:value-of select="substring($text, 1, string-length(substring-before($text, '<newline>')) + 1)"/>
      <br/>
      <xsl:call-template name="nl2br">
	<xsl:with-param name="text" select="substring-after($text, '<newline>')"/>
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="$text"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>
Statt <newline> musst du überall &#10; einsetzen. (hat entweder der Browser oder die Forumssoftware leider aus dem Text entfernt).

Das template "nl2br" läßt allerdings die Zeilenumbrüche drin und fügt nur nach jedem Zeilenumbruch noch ein <br> Tag ein. Du kannst es ja noch anpassen.

Gruß
 
Zuletzt bearbeitet von einem Moderator:
Zurück