dey: textarea und Zeilenumbrüche

Hallo,

jetzt bin ich aber wirklich froh, dass der Server wieder rennt.

Mein Problem:

  • ich habe eine form (<form action="input.php" method="POST">)
  • mit einer textarea (<textarea name="report" cols="50" rows="10" maxlength="2000">)
  • in XSL (<?xml version="1.0"  encoding="iso8859-1"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:fo="http://www.w3.org/1999/XSL/Format" version='1.0'>)
  • die Variable report übernehme ich nach submit in input.php mit (if (isset($_REQUEST['report'])) {$report = $_REQUEST['report'];} else {$report = 'error_while_get_data';})
  • innerhalb report kann ich die Zeilenumbrüche nicht, wie ich es gewohnt bin, als \n maskieren
  • beim schreiben meiner Daten in die XML-Datei tauchen Zeilenumbrüche tatsächlich als Zeilenumbrüche und nicht durch PLatzhalter auf

Wie kann ich den Zeilenumbruch in report oder auch beim lesen der XML-Datei umwandeln in <br>?

bydey

--
-- noch immer ein erfolgloser <DIV> Jünger --
  1. Hallo,

    Mein Problem:

    xmlns:fo="http://www.w3.org/1999/XSL/Format" version='1.0'>)

    Wie kann ich den Zeilenumbruch in report oder auch beim lesen der XML-Datei umwandeln in <br>?

    Das kommt darauf an, ob und was du dem XSLT-Prozessor servierst.
    <br> wäre bei XSL-FO so oder so falsch.
    Wenn du den Inhalt der Textarea noch zuvor in XML abspeicherst und dann die XSL-Transformation durchführst, kannst du die Zeilenumbruche mit XSL in was auch immer du möchtest umwandeln.
    Sonst fällt mir nur eine Lösung mit RegExp. auf den Inhalt der Variable/Textarea in PHP ein.

    Grüße
    Thomas

    1. Hallo,

      Zusatzinfo:
      ich habe kürzlich an anderer Stelle XML direkt in PHP geparsed und dort die Zeileumbrüche erfolgreich über die Maierung von \n gewandelt.
      Das wollte ich jetzt bei dieser älteren Variante, die noch über XSL geht nachholen.
      Hat aber, wie beschrieben nicht geklappt

      xmlns:fo="http://www.w3.org/1999/XSL/Format" version='1.0'>)

      Wie kann ich den Zeilenumbruch in report oder auch beim lesen der XML-Datei umwandeln in <br>?

      Das kommt darauf an, ob und was du dem XSLT-Prozessor servierst.
      <br> wäre bei XSL-FO so oder so falsch.

      Was wäre denn richtig?

      Wenn du den Inhalt der Textarea noch zuvor in XML abspeicherst und dann die XSL-Transformation durchführst, kannst du die Zeilenumbruche mit XSL in was auch immer du möchtest umwandeln.

      Ich finde/sehe sie aber nicht, weil ich nicht sicher bin, wie sie in der Variable übergeben werden.
      Wenn ich die XML-Datei im Editor öffne, ist dort einen Zeilenumbruch

      Sonst fällt mir nur eine Lösung mit RegExp. auf den Inhalt der Variable/Textarea in PHP ein.

      Das muss ich mir mal anschauen.

      bydey

      --
      -- noch immer ein erfolgloser <DIV> Jünger --
      1. Hallo,

        Noch ein Nachtrag

        Sonst fällt mir nur eine Lösung mit RegExp. auf den Inhalt der Variable/Textarea in PHP ein.

        Das muss ich mir mal anschauen.

        ich habe nachgeschaut und denke du spielst auf ereg_replace oder ähnliches an.
        Das war ja meine Methode erster Wahl, aber wie schon erwähnt, ich finde/ sehe den Zeilenumbruch in der Variable nicht!

        bydey

        --
        -- noch immer ein erfolgloser <DIV> Jünger --
      2. Hallo,

        xmlns:fo="http://www.w3.org/1999/XSL/Format" version='1.0'>)

        Wie kann ich den Zeilenumbruch in report oder auch beim lesen der XML-Datei umwandeln in <br>?

        Das kommt darauf an, ob und was du dem XSLT-Prozessor servierst.
        <br> wäre bei XSL-FO so oder so falsch.

        Was wäre denn richtig?

        FO kennt keinen <br>. Es kommt auf dem FO-Prozessor an welche Eingenschaften er unterstützt. Bei FOP muss es z.B. ein fo:block</fo:block> sein.

        Wenn du den Inhalt der Textarea noch zuvor in XML abspeicherst und dann die XSL-Transformation durchführst, kannst du die Zeilenumbruche mit XSL in was auch immer du möchtest umwandeln.

        Ich finde/sehe sie aber nicht, weil ich nicht sicher bin, wie sie in der Variable übergeben werden.
        Wenn ich die XML-Datei im Editor öffne, ist dort einen Zeilenumbruch

        Noch ein Nachtrag
        »»
        »»ich habe nachgeschaut und denke du spielst auf ereg_replace oder ähnliches an. Das war ja meine Methode erster Wahl, aber wie schon erwähnt, ich finde/ sehe den Zeilenumbruch in der Variable nicht!

        Die Zeichen für den Zeilenumbruch sind da, wie diese in PHP herauszufinden sindm, weiss ich nicht. Aber entweder die hexadezimale oder die Unicode Abfrage nach diesen Zeichen sollte dort funkionieren: Tab (9), Zeilenvorschub / line feed (A) und Wagenrücklauf / carriage return (D), Leerzeichen (20) .

        Aber die Frage ist für mich eher: machst du eine Transformation mit XSL nachdem die Daten aus dem Formular ins XML gespeichert wurden?
        Es kann aber auch sein, dass ich deine Frage nur nicht richtig verstehe.

        Grüße
        Thomas

        1. Hallo Thomas,

          ich hoffe du bist heute auch auf Sendung, damit ich das Problem doch noch gelöst bekomme

          <br> wäre bei XSL-FO so oder so falsch.

          Was wäre denn richtig?

          FO kennt keinen <br>. Es kommt auf dem FO-Prozessor an welche Eingenschaften er unterstützt. Bei FOP muss es z.B. ein fo:block</fo:block> sein.

          Unglücklicherweise hast du recht. Ich habe meinen code noch einmal überprüft und festgestellt, dass ich einen Statthalter(|lb|), den ich dem Autor zur Verfügung stelle später aufwendig wieder filtere und in Zeilenbrüche umsetze

          Aber die Frage ist für mich eher: machst du eine Transformation mit XSL nachdem die Daten aus dem Formular ins XML gespeichert wurden?
          Es kann aber auch sein, dass ich deine Frage nur nicht richtig verstehe.

          Ich will in PHP den Zeilenumbruch nach dem submit in der Variable finden und in etwas übersetzen, was ich später beim lesen mit XSL wiederum verwenden kann, um einen Zeilenumbruch daraus zu erzwingen.

          z.B. $in_text = str_replace("\n","<fo:block></fo:block>",$in_text);

          bydey

          --
          -- noch immer ein erfolgloser <DIV> Jünger --
          1. Hallo day,

            ich hoffe du bist heute auch auf Sendung, damit ich das Problem doch noch gelöst bekomme

            mal gucken ;-)

            Aber die Frage ist für mich eher: machst du eine Transformation mit XSL nachdem die Daten aus dem Formular ins XML gespeichert wurden?
            Es kann aber auch sein, dass ich deine Frage nur nicht richtig verstehe.

            Ich will in PHP den Zeilenumbruch nach dem submit in der Variable finden und in etwas übersetzen, was ich später beim lesen mit XSL wiederum verwenden kann, um einen Zeilenumbruch daraus zu erzwingen.

            z.B. $in_text = str_replace("\n","<fo:block></fo:block>",$in_text);

            Wozu so kompliziert?
            Lass doch die Zeilenumbrüche drinn, du kanns sie dann direkt in und mit XSL umwandeln.

            <xsl:template name="cr2whatever">
              <xsl:param name="text" />
               xsl:choose
               <xsl:when test="contains($text, '&#xA;')">
                <xsl:value-of select="substring-before($text, '&#xA;')" />

            <whatever />

            <xsl:call-template name="cr2br">
                 <xsl:with-param name="text" select="substring-after($text, '&#xA;')" />
                </xsl:call-template>
               </xsl:when>
               xsl:otherwise
                <xsl:value-of select="$text" />
               </xsl:otherwise>
              </xsl:choose>
            </xsl:template>

            Grüße
            Thomas

            1. Morgen Thomas,

              bist heute nen bissle später aufgestanden!?
              Habe schon gedacht ich müsste heute dumm sterben.

              <xsl:when test="contains($text, '&#xA;')">

              Das war es, was ich gesucht habe! Danke!

              bydey

              --
              -- noch immer ein erfolgloser <DIV> Jünger --
              1. Morgen Thomas,

                *morgääähn* ;-)

                bist heute nen bissle später aufgestanden!?

                Ne, aber hatte vorher noch andere Sachen zu tun.

                <xsl:when test="contains($text, '&#xA;')">

                Das war es, was ich gesucht habe! Danke!

                Gerne :)

                Grüße
                Thomas