selfmade01: Quelltext formatiert ausgeben \r\n geht nicht

Hallo,

ich stolpere gerade über wohl was ganz simples.
ich programmiere hier gerade eine dynamische php-seite und möchte das der Quelltext mir formatiert ausgegeben wird, so dass ich einfacher weiss wo was ist

ich habe dabei als Endzeichen
\r\n
probiert aber das schmeisst er mir einfach rauss

z.B.

  
$stringDiv	.='<div id="tabr'.$i.'" class="tab-content"><b>testsss.</b></div>\n\r';  

weiss jemand was ich hier angeben muss?

Grüße Jürgen

  1. Hakuna matata!

    ich habe dabei als Endzeichen
    \r\n

    $stringDiv .='<div id="tabr'.$i.'" class="tab-content"><b>testsss.</b></div>\n\r';

      
    \r\n oder \n\r? Was denn nun?  
      
    Escapesequenzen wie \r und \n werden von PHP nur erkannt, wenn der String von doppelten Anführungezeichen umschlossen wird.  
      
    Wenn du den Whitespace auch bei der Ausgabe sehen willst, musst du die CSS-Eigenschaft [white-space](http://wiki.selfhtml.org/wiki/CSS/Eigenschaften/Textausrichtung/white-space) entsprechend setzen.  
      
    
    -- 
    “All right, then, I'll go to hell.” – Huck Finn
    
    1. Liebe Mitdenker,
      liebe Wissende,
      liebe Neugierige,

      ja!

      Wenn du den Whitespace auch bei der Ausgabe sehen willst, musst du die CSS-Eigenschaft white-space entsprechend setzen.

      Da habe ich gerade eine sehr unangenehme Entdeckung gemacht.
      Wenn man nur mit CSS und white-space:pre-wrap, arbeitet, dann wird der Text zwar so einigermaßen wunschgemäß formatiert, aber wenn man ihn dann mittels Cut-n-Paste zurück holt in einen Editor (Notepad++), dann sind ALLE Whitespaces verschwunden.

      Oder hab ich da nur einfach 'was falsch gemnacht?

      Spirituelle Grüße
      Euer Robert

      --
      Möge der Forumsgeist wiederbelebt werden!
      1. Hallo

        bedeutet das ich nun in jeder html-zeile (auch wenn ich diese in php schreibe)
        white-space:pre-wrap eingeben muss?

        ich hatte vor langer langer Zeit mal etwas mit php geschrieben und dachte ich hätte damals nur "\n" hinten dran gesetzt

        hatte ganz vergessen ob ich damals den html-code in "" oder in '' setzte

        Grüße Jürgen

        1. Hakuna matata!

          bedeutet das ich nun in jeder html-zeile (auch wenn ich diese in php schreibe)
          white-space:pre-wrap eingeben muss?

          Nein, wenn du nur die Quelltext-Ansicht formatieren möchtest, dann kannst du auf white-space vollständig verzichten. Wenn du die Zeilenumbrücke aus dem Quelltext auch in der gewöhnlichen Nutzer-Ansicht haben willst, dann reicht es, wenn du die white-space-Eigenschaft bei _einem_ gemeinsamen Vorfahren-Element setzt.

          ich hatte vor langer langer Zeit mal etwas mit php geschrieben und dachte ich hätte damals nur "\n" hinten dran gesetzt

          hatte ganz vergessen ob ich damals den html-code in "" oder in '' setzte

          Wenn es funktioniert hat, dann war es wohl das doppelte Anführungszeichen.

          --
          “All right, then, I'll go to hell.” – Huck Finn
          1. Hallo

            Nein, wenn du nur die Quelltext-Ansicht formatieren möchtest, dann kannst du auf white-space vollständig verzichten.

            und wo muss ich dann nun was setzen?

            mich interessiert hier nur die Quelltextausgabe (ich bekomme langsam ein Augenproblem wenn ich den Quelltext ansehen muss) deswegen brauch ich da unbedingt was, damit dieser etwas sauberer strukturierter dargestellt wird

            leider benutze ich aktuell PHP mit ''

            Grüße Jürgen

            1. Hallo

              Nein, wenn du nur die Quelltext-Ansicht formatieren möchtest, dann kannst du auf white-space vollständig verzichten.

              und wo muss ich dann nun was setzen?

              Wo ist denn das Problem? Es wurde mehrfach geschrieben, dass „\n“ oder „\r\n“ nur mit doppelten Anführungszeichen „"“ interpretiert werden. Wenn du sie also interpretiert haben willst, musst du sie logischerweise in doppelten Anführungszeichen einschließen.

              Das kann natürlich Nebenwirkungen (neudeutsch auch „Kollateralschäden“) haben. Attributwerte von HTML-Tags, die in einer Zeichenkette, die von doppelten Anführungszeichen eingeschlossen ist, stehen, können selbst nicht ohne Maskierung von doppelten Anführungszeichen eingeschlossen sein.

              // wird nicht funktionieren  
              // String ist nach „class="“ zuende, „\n“ wird nicht interpretiert, weil es außerhalb des Strings ist  
              $string = "<p class="merksatz">Geht nicht!</p>\n";  
              // String funktioniert wegen der außen einfachen und im String doppelten Anführungszeichen, „\n“ wird aber nicht interpretiert  
              $string = '<p class="merksatz">Geht nicht!</p>\n';  
                
              // wird funktioneren  
              // String funktioniert wegen der im String verwendeten Maskierung (umständlich handlebar), „\n“ wird interpretiert  
              $string = "<p class=\"merksatz\">Geht!</p>\n";  
              // String funktioniert wegen der außen dopelten und im String einfachen Anführungszeichen, „\n“ wird interpretiert  
              $string = "<p class='merksatz'>Geht!</p>\n";
              

              Je nach Konfiguration gibt es auch eine Systemkonstante für den Zeilenumbruch des Betriebssystems, auf dem PHP installiert ist. Das ist die seit Version 5.0.2 verfügbare Konstante PHP_EOL.

              // wird in jeder ansonsten gültigen Konfiguration funktionieren  
              $string = "<p class='merksatz'>Geht!</p>" . PHP_EOL;  
              $string = '<p class="merksatz">Geht!</p>' . PHP_EOL;  
              $string = "<p class=\"merksatz\">Geht!</p>" . PHP_EOL;
              

              mich interessiert hier nur die Quelltextausgabe

              Dafür isses genau das Richtige.

              Tschö, Auge

              --
              Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
              Terry Pratchett, "Wachen! Wachen!"
              ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
              Veranstaltungsdatenbank Vdb 0.3
        2. Lieber Jürgen,
          Liebe Mitdenker,
          liebe Wissende,
          liebe Neugierige,

          ja!

          Das mit dem CSS und den Browsern ist scheinbar auch nicht logisch.

          PHP:
          $text = "
          Hier beginnnt mein Text, der zeigen soll,
          - wie Einrückungen mit Tabs funktionieren
          - wie man einen Tab in die Textarea bringt
          - wann man zu verweifeln hat
          und Vieles mehr, dass mich schon lange ärgert.

          Leerzeilen sollten auch funktionieren!"

          HTML-Template:

          $tpl='
          <h1>Tagesaufgabe</h1>
          <p>Texte und ihre Formatierung</p>
          <div class="natural">{{AUSGABE}}</div>';

          CSS:

          .natural {
              font-size:105%;
              font-familiy:Tahoma, serif;
              white-space:pre-wrap;
              word-wrap: break-word;
              overflow:auto;
          }

          PHP Ausgabe von Template und Text:

          echo str_replace('{{AUSGABE}}', htmlspecialchars($text, ENT_QUOTES), $tpl);

          Spirituelle Grüße
          Euer Robert

          --
          Möge der Forumsgeist wiederbelebt werden!
      2. Aloha ;)

        Da habe ich gerade eine sehr unangenehme Entdeckung gemacht.
        Wenn man nur mit CSS und white-space:pre-wrap, arbeitet, dann wird der Text zwar so einigermaßen wunschgemäß formatiert, aber wenn man ihn dann mittels Cut-n-Paste zurück holt in einen Editor (Notepad++), dann sind ALLE Whitespaces verschwunden.

        Oder hab ich da nur einfach 'was falsch gemnacht?

        Ne. Das liegt wohl daran, dass die CSS-Angaben offensichtlich nur die Darstellung beeinflussen, nicht die interne Repräsentation des Textes, die per copy in der Zwischenablage landet... Macht auch durchaus Sinn, ich schätze bei den meisten Browsern führt Copy zum reinen Kopieren des Markup der markierten Bereiche (bzw. einer Repräsentation davon) - und man erwartet spezielle whitespaces da im Eingefügten eben nur dann, wenn <br> etc. im HTML steht. Das würde ja sonst heißen, dass Anwender beim Einfügen alle Whitespaces mitbekämen, die nur zur Codestrukturierung eingebaut sind.

        Idee: Versuch doch stattdessen mal, den fraglichen Inhalt/String in eine readonly-textarea zu werfen; diese kann dann per CSS auch entsprechend gestyled werden, damit der textarea-Charakter nicht auffällt. Die Semantik leidet dabei imho nur unwesentlich. Vielleicht funktionierts da so (da der Browser die whitespaces bei einer Textarea auf jeden Fall in jeder Repräsentation präsent haben müsste).

        Oder noch besser und semantisch korrekter: Versuchs doch mal mit <pre>, denn dafür ist das ja eigentlich da. Auch da sollten die Browser Rücksicht auf whitespaces nehmen.

        Grüße,

        RIDER

        --
        Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
        ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
  2. Hi,

    ich [...] möchte das der Quelltext mir formatiert ausgegeben wird, so dass ich einfacher weiss wo was ist

    ich habe dabei als Endzeichen
    \r\n
    probiert

    also Carriage Return und Linefeed, genau richtig.

    aber das schmeisst er mir einfach rauss

    Wer??

    $stringDiv .='<div id="tabr'.$i.'" class="tab-content"><b>testsss.</b></div>\n\r';

    weiss jemand was ich hier angeben muss?

    Bedenke, dass es in PHP einen Unterschied macht, ob du Strings in einfache oder doppelte Anführungszeichen setzt.

    Ciao,
     Martin

    --
    Auch in Eckkneipen geht es manchmal rund.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  3. Hallo Jürgen,

    das Endezeichen \r\n ist ein CR LF, das Zeilenende Zeichen unter Windows.
    CR steht dabei für "Carriage Return", den Wagenrücklauf, was das Zurückspringen des Cursors auf den Anfang der Zeile bewirkt. LF bedeutet "Line Feed", was wiederum einen Zeilenvorschub unter Windows verursacht. Damit landet der Cursor in der nächsten Zeile.
    Diese Sonderzeichen werden in PHP jedoch nur ausgewertet, sofern sie in doppelten Anführungszeichen " stehen. Sind sie hingegen in einfachen Anführungszeichen eingeschlossen, so werden Sonderzeichen, meist durch ein vorangestelltes "", nicht als Sonderzeichen interpretiert. Stattdessen wird der String "\r\n" wie in diesem Fall durchgereicht.

    Kurz gesagt:
    ändere Deinen Code wie folgt ab:

      
    $stringDiv.='<div id="tabr'.$i.'" class="tab-content"><b>testsss.</b></div>'."\n\r";  
    
    

    Unter Linux ist das Zeilenendekennzeichen das "\n" und unter Mac "\r".
    Siehe: Wikipedia Zeilenumbruch

    Grüße,
    the-FoX

    1. Hallo

      Kurz gesagt:
      ändere Deinen Code wie folgt ab:

      $stringDiv.='<div id="tabr'.$i.'" class="tab-content"><b>testsss.</b></div>'."\n\r";

        
      Wenn dann richtig rum. Erst der Rücklauf, dann die neue Zeile („\r\n“).  
        
      
      > Unter Linux ist das Zeilenendekennzeichen das "\n" und unter Mac "\r".  
        
      Die Zeiten von „\r“ unter dem Mac sind seit der ersten Version von Mac OS-X vorbei. Ich denke nicht, dass der alte Mac-Umbruch heute noch der Berücksichtigung bedarf.  
        
      Davon abgesehen können (alle mir bekannten) Browser auch die fremden Umbruchversionen in der Quelltextansicht anzeigen.  
        
      Tschö, Auge  
      
      -- 
      Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.  
      Terry Pratchett, "Wachen! Wachen!"  
        
      ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}  
        
      [Veranstaltungsdatenbank Vdb 0.3](http://termindbase.auge8472.de/)
      
      1. Liebe Mitdenker,
        liebe Wissende,
        liebe Neugierige,

        ja!

        Davon abgesehen können (alle mir bekannten) Browser auch die fremden Umbruchversionen in der Quelltextansicht anzeigen.

        Sie werden im Browser sogar expandiert zu "\r\n".

        Insbesondere einer Textarea kannst Du nicht abgewöhnen, dass sie beim Request "\r\n" mitsendet anstelle aller anderen Möglichkeiten.

        Spirituelle Grüße
        Euer Robert

        --
        Möge der Forumsgeist wiederbelebt werden!
        1. Hallo

          Davon abgesehen können (alle mir bekannten) Browser auch die fremden Umbruchversionen in der Quelltextansicht anzeigen.

          Sie werden im Browser sogar expandiert zu "\r\n".

          Insbesondere einer Textarea kannst Du nicht abgewöhnen, dass sie beim Request "\r\n" mitsendet anstelle aller anderen Möglichkeiten.

          Macht meiner nicht. Der schickt „\n“, wie ich es auf und von meinem Betriebssystem erwarte.

          Aber vielleicht solltest du – ohne jetzt den Wolf in dir wecken zu wollen – genauer spezifizieren, dass du mit Windows arbeitest und ob es vielleicht normal sein könnte, dass der in diesem Betriebssystem arbeitende Browser für in ihm getätigte Eingaben auch das auf diesem Betriebssystem verwendete Zeilenendzeichen („\r\n“) benutzt. Ich jedenfalls würde das auf Windows, wie es analog dazu auch in meinem Linux geschieht, erwarten.

          Tschö, Auge

          --
          Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
          Terry Pratchett, "Wachen! Wachen!"
          ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
          Veranstaltungsdatenbank Vdb 0.3
          1. Liebe Mitdenker,
            liebe Wissende,
            liebe Neugierige,

            ja!

            Sie werden im Browser sogar expandiert zu "\r\n".

            Insbesondere einer Textarea kannst Du nicht abgewöhnen, dass sie beim Request "\r\n" mitsendet anstelle aller anderen Möglichkeiten.

            Macht meiner nicht. Der schickt „\n“, wie ich es auf und von meinem Betriebssystem erwarte.

            Dann hast Du den sicherlich selber geschrieben?

            Aber vielleicht solltest du – ohne jetzt den Wolf in dir wecken zu wollen – genauer spezifizieren, dass du mit Windows arbeitest und ob es vielleicht normal sein könnte, dass der in diesem Betriebssystem arbeitende Browser für in ihm getätigte Eingaben auch das auf diesem Betriebssystem verwendete Zeilenendzeichen („\r\n“) benutzt. Ich jedenfalls würde das auf Windows, wie es analog dazu auch in meinem Linux geschieht, erwarten.

            Das hat nicht mit dem Betriebssystem zu tun. Es ist in RFC???? festgelegt für HTTP und damit für den Browser. Der muss unabhängig vom OS immer denselben Standard gewährleisten!

            Es ist mir jetzt zu müßig, die RFC rauszusuchen, aber es sollte mich wundern, wenn sie die geändert hätten...

            Spirituelle Grüße
            Euer Robert

            --
            Möge der Forumsgeist wiederbelebt werden!
            1. Hallo

              Sie werden im Browser sogar expandiert zu "\r\n".

              Insbesondere einer Textarea kannst Du nicht abgewöhnen, dass sie beim Request "\r\n" mitsendet anstelle aller anderen Möglichkeiten.

              Macht meiner nicht. Der schickt „\n“, wie ich es auf und von meinem Betriebssystem erwarte.

              Ahem, macht er doch nicht.

              Aber vielleicht solltest du … genauer spezifizieren, … ob es vielleicht normal sein könnte, dass der in diesem Betriebssystem arbeitende Browser für in ihm getätigte Eingaben auch das auf diesem Betriebssystem verwendete Zeilenendzeichen („\r\n“) benutzt.

              Das hat nicht mit dem Betriebssystem zu tun. Es ist in RFC???? festgelegt für HTTP und damit für den Browser. Der muss unabhängig vom OS immer denselben Standard gewährleisten!

              Es ist mir jetzt zu müßig, die RFC rauszusuchen, aber es sollte mich wundern, wenn sie die geändert hätten...

              Eben getestet, im POST wird „%0D%0A“, also „\r\n“ als Umbruch gesendet. Firefox unter Lubuntu 14.04.

              Tschö, Auge

              --
              Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
              Terry Pratchett, "Wachen! Wachen!"
              ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
              Veranstaltungsdatenbank Vdb 0.3