tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
13
ZUGRIFFE
2065
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    di-five Tutorials.de Gastzugang
    Hallo,

    ich bastel zwischendurch gerne mal Internetseiten. Jedes mal zerbreche ich mir den Kopf darüber, wie ich nun mit der Quellcodeformatierung verfahre. Wenn ich ein PHP-Dokument mit HTML schreibe, sieht das in der Quellcodeanzeige des Browser immer anders aus, als im Editor.

    Jetzt wollte ich mal wissen, ob ihr euch um das Aussehen des Quellcodes Gedanken macht, oder ob euch das egal ist, wie er aussieht.

    Optimiert ihr den Quellcode so, dass er im Editor vernünftig aussieht oder so, dass er hinterher in der Quellcodeanzeige des Browsers vernünftig aussieht?

    Beim Einrücken der ganzen Tags benutze ich schon immer nur Leerzeichen, kennt jemand einen Editor der wenn er automatisch einrückt nur mit Leerzeichen einrückt, oder irgendeine Option in irgendeinem Programm, wo man einstellen kann, dass mit Leerzeichen eingerückt werden soll?

    Freue mich auf eine Antwort.

    Gruß di-five
     

  2. #2
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    Zitat Zitat von di-five
    ich bastel zwischendurch gerne mal Internetseiten. Jedes mal zerbreche ich mir den Kopf darüber, wie ich nun mit der Quellcodeformatierung verfahre. Wenn ich ein PHP-Dokument mit HTML schreibe, sieht das in der Quellcodeanzeige des Browser immer anders aus, als im Editor.
    Vermutlich, weil Du den Quellcode mit echo() ausgibst.

    Zitat Zitat von di-five
    Jetzt wollte ich mal wissen, ob ihr euch um das Aussehen des Quellcodes Gedanken macht, oder ob euch das egal ist, wie er aussieht.

    Optimiert ihr den Quellcode so, dass er im Editor vernünftig aussieht oder so, dass er hinterher in der Quellcodeanzeige des Browsers vernünftig aussieht?
    Quellcode sollte in erster Linie an der Stelle ordentlich aussehen, wo er bearbeitet wird. D.h. bei einer PHP-Datei sollte mehr Wert auf ordentliche Einrückungen des PHP-Codes Wert gelegt werden als auf die Ausgabe, die der Browser zu sehen bekommt. Nicht desto Trotz ist es sinnvoll, gelegentlich Zeilenumbrüche und vielleicht auch die ein oder andere Einrückung mit auszugeben, da dies die Fehlersuche im Skript erleichtern kann, da man schneller Rückschlüsse auf den betroffenen PHP-Teil entdeckt. Bei reinen HTML-Seiten ist das Codeformatting Zwecks Wartung der Seite auch nicht verkehrt.

    Zitat Zitat von di-five
    Beim Einrücken der ganzen Tags benutze ich schon immer nur Leerzeichen, kennt jemand einen Editor der wenn er automatisch einrückt nur mit Leerzeichen einrückt, oder irgendeine Option in irgendeinem Programm, wo man einstellen kann, dass mit Leerzeichen eingerückt werden soll?
    Nahezu jeder halbwegs gute Editor lässt sich diesbezüglich einstellen, einige, z.B. jEdit, ermöglichen auch die nachträgliche Umwandlung von Leerzeichen zu Tabs und umgekehrt.

    Bitte starte jetzt aber keinen Was-Ist-Der-Beste-Editor-Thread, davon hatten wir schon genug, die sich über die Suchfunktion finden lassen.

    Gruß hpvw
     
    Warum gibt (fast) keiner im Datenbankforum an, welches DBMS er benutzt?
    Ich gehe im Zweifelsfall ohne Nachfrage von MySQL > 4.1 i.V.m. PHP aus.
    Gewöhnt euch bitte auch an, die Fehlermeldung von mysql_error() zu posten.

  3. #3
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    D.h. bei einer PHP-Datei sollte mehr Wert auf ordentliche Einrückungen des PHP-Codes Wert gelegt werden als auf die Ausgabe, die der Browser zu sehen bekommt. Nicht desto Trotz ist es sinnvoll, gelegentlich Zeilenumbrüche und vielleicht auch die ein oder andere Einrückung mit auszugeben, da dies die Fehlersuche im Skript erleichtern kann, da man schneller Rückschlüsse auf den betroffenen PHP-Teil entdeckt]
    Das sehe ich noch ein bisschen schärfer. In der PHP Datei führt kein Weg vorbei
    diese ordentlich formatiert zu gestalten. Und genau das gleiche gilt bei der Ausgabe an
    den Browser.
    Wenn man die Seite z.B. validieren möchte und der gesamte Content steht in der
    Quellcodeansicht des Firefox in einer Zeile, und der validtor findet Fehler,
    dann mal viel Spass beim Fehlersuchen...


    Gruß

    RedWing
     
    "I'm not deaf, I'm ignoring you"
    ----

  4. #4
    Avatar von TwoFaze
    TwoFaze TwoFaze ist offline Mitglied Gold
    Registriert seit
    Nov 2003
    Ort
    Karlsruhe (BW)
    Beiträge
    162
    Man kann doch auch einfach ein '\n' ausgeben. Das hat bei mir bisher immer einen Zeilenumbruch im HTML-Quelltext verursacht!
    MfG
    TwoFaze
     

  5. #5
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Ich hab mir vorhin genau zu diesem Thema ein paar Gedanken gemacht und diese in einer Funktion verewigt.
    Da meine Seite erstmal den ganzen Output in einen String schreibt und dann gegebenenfalls am Ende ausgibt jage ich diesen String durch meine Funktion formathtml(). Diese fuegt mir Zeilenumbrueche ein und rueckt auch den Quelltext ein.
    Somit brauch ich mir beim Programmieren mit PHP keine Gedanken mehr ueber das Layout der HTML-Ausgaben machen.

    Hier mal die Funktion, inklusive einem kleinen Beispiel:
    PHP-Code:
    <?php
    function formathtml($html)
    {
        
    $tabs=0;
        
    $html_array=preg_split('/(<(?:[^<>]+(?:"[^"]*"|\'[^\']*\')?)+>)/',$html,-1,PREG_SPLIT_DELIM_CAPTURE PREG_SPLIT_NO_EMPTY);
        
    $html='';
        for (
    $x=0;$x<count($html_array);$x++)
            {
                if (
    substr($html_array[$x],0,2)=='</')
                    {
                        
    $tabs--;
                    }
                for (
    $y=0;$y<$tabs;$y++)
                    {
                        
    $html.="    ";
                    }
                
    $html.=$html_array[$x]."\r\n";
                if ((
    substr($html_array[$x],0,1)=='<') && (substr($html_array[$x],1,1)!='/'))
                    {
                        if ((
    substr($html_array[$x],1,1)!=' ') && (substr($html_array[$x],1,3)!='img') && (substr($html_array[$x],1,2)!='br') && (substr($html_array[$x],1,2)!='hr') && (substr($html_array[$x],1,5)!='input') && (substr($html_array[$x],1,4)!='link') && (substr($html_array[$x],1,4)!='meta') && (substr($html_array[$x],1,3)!='col') && (substr($html_array[$x],1,5)!='frame') && (substr($html_array[$x],1,7)!='isindex') && (substr($html_array[$x],1,5)!='param') && (substr($html_array[$x],1,4)!='area') && (substr($html_array[$x],1,4)!='base'))
                            {
                                
    $tabs++;
                            }
                    }
            }
        if (
    $tabs!=0)
            {
                
    $html.='<!--'.$tabs." open elements found-->\r\n";
            }
        return 
    $html;
    }

    $output='<html>';
    $output.='<head>';
    $output.='<title>Test</title>';
    $output.='</head>';
    $output.='<body>';
    $output.='bla<br>';
    $output.='<img src="delete.jpg">';
    $output.='<p>bla</p>';
    $output.='</body>';
    $output.='</html>';
    echo 
    formathtml($output);
    ?>
    Ich weiss nicht ob ich alle offenen Tags drin hab, konnte bisher aber kein Problem feststellen. Falls ich eines uebersehen habe bitte ich um einen Hinweis/Wink mit dem Brueckenpfeiler.

    Vor der Formatierung:
    HTML-Code:
    <html><head><title>Test</title></head><body>bla<br><img src="delete.jpg"><p>bla</p></body></html>
    Und nach der Formatierung sieht der HTML-Quelltext dann so aus:
    HTML-Code:
    <html>
        <head>
            <title>
                Test
            </title>
        </head>
        <body>
            bla
            <br>
            <img src="delete.jpg">
            <p>
                bla
            </p>
        </body>
    </html>
    Nachtrag: Ich hab die Liste der leeren Tags erweitert. Es sollten jetzt alle laut SelfHTML vorhandenen Leer-Tags in der Liste sein. Basefont wird von Base mit abgedeckt.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  6. #6
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Ob du Blöcke des Quellcodes einrückst solltest, hängt davon ab, ob es dir einen Vorteil verschafft. Denn Whitespace-Zeichen werden bei PHP und HTML (eigentlich) nicht beachtet.
    So wäre es beispielsweise auch möglich, ein gesamtes Skript in einer Zeile zu schreiben – was aus meiner Sicht allerdings keinerlei Vorteile hat, da man je nach Komplexität bereits nach fünfzig oder hundert Zeichen Quellcode die Übersicht verlieren kann.
    Bei HTML verhält es sich ähnlich: Falls du zur Fehleranalyse beispielsweise einen Browser benutzt, der den Quellcode nachträglich formatiert anzeigen kann, ist das Einrücken auch hier nicht notwendig. Wie gesagt, es hängt ganz davon ab, ob es für dich einen Vorteil hat.

    Nachtrag: Ich hab die Liste der leeren Tags erweitert.
    Es gibt auch Elemente, bei denen die End-Tags nicht notiert werden müssen.
     
    Markus Wulftange

  7. #7
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Zitat Zitat von Gumbo
    Es gibt auch Elemente, bei denen die End-Tags nicht notiert werden müssen.
    Dies ist aber nicht standardkonform, oder?

    Bei der Funktion wird es auf jeden Fall dazu fuehren, dass nach dem HTML-Teil noch ein Kommentar ausgegeben wird mit der Anzahl der nicht geschlossenen Tags.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  8. #8
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Dies ist aber nicht standardkonform, oder?
    Ich hätte dazuschreiben sollen, dass nur die HTML-Syntax soetwas zulässt. So deklariert <p>foo<p>bar beispielsweise zwei p-Elemente auf derselben Ebene und nicht etwa das letzte p-Element als Kindelement des ersten. Welche Elemente diese Regel betrifft, ist in den Dokumentyp-Definitionen notiert.
     
    Markus Wulftange

  9. #9
    di-five Tutorials.de Gastzugang
    Hallo,

    ich bedanke mich für eure Antworten!

    Ich benutze HTML als Standardsprache, und rücke die includierten Dateien einfach ein. Mit PHP fange ich dann ganz am linken Rand im HTML-Quellcode an. HTML rücke ich jeweils mit 2 Leerzeichen (Leerstellen? *gg*) ein. Im PHP-Code benutze ich dann "\n" hehe : ).

    Ich glaube so habe ich eine halbwegs vernünftige Variante gefunden, auf jeden Fall eine lustige Sache!

    Der HTML-Quellcode, den ich via echo / printf (habe keinen Unterschied bei der Ausgabe festgestellt) in dem PHP-Container ausgebe sieht immer e aus, wenn er hinterher im Browser richtig dargestellt werden soll.

    Hmm muss ich nochmal gucken wie ich das mache, ich bedanke mich auf jeden Fall für die Antworten, werde mir jEdit auf jeden Fall mal angucken, "\n" kannte ich schon, war mir aber in dem Moment nicht eingefallen.

    Also so sieht das jetzt aus:

    index.php
    Code :
    1
    2
    3
    4
    5
    
    ...
          <div id="seite">
    <?php include($seite); echo "\n"; ?>
          </div>
    ...

    seite.php
    PHP-Code:
    <?php
        
    while($teile mysql_fetch_row($ergebnis_teile))
            {
                echo
                    
    '            <tr>
                  <td align="left">
                    ' 
    $teile[1] . '
                  </td>
                  <td align="center">
                    <img src="../images/bearbeiten.png" title="' 
    $teile[1] . '" />
                  </td>
                  <td align="center">
                    <img src="../images/loeschen.png" title="' 
    $teile[1] . '" />
                  </td>
                </tr>' 
    "\n";
          }
    ?>
    Wenn ich das Hochkomma ohne <tr> direkt hinter echo setze habe ich einen Umbruch im Code, und ansonsten steht das <tr> noch weiter rechts, also sehe ich das richtig, wenn es da keine andere Möglichkeit gibt?!

    So wird das in der Quellcodeanzeige vom Firefox Version 1.5 vernünftig ausgegeben, warum sieht der Quellcode wenn ich ihn von der Quellcodeanzeige des Browsers in einen Texteditor kopiere wieder anders aus (alles Leerzeichen)?

    Gruß di-five
     

  10. #10
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    @Dennis: Deine Formatierung könnte mit Hinweisen des w3c kollidieren:
    Zitat Zitat von [url=http://www.w3.org/TR/html4/struct/text.html#h-9.1]HTML 4.01 Specification -> Text -> White space[/url]
    ...

    The PRE element is used for preformatted text, where white space is significant.

    In order to avoid problems with SGML line break rules and inconsistencies among extant implementations, authors should not rely on user agents to render white space immediately after a start tag or immediately before an end tag. Thus, authors, and in particular authoring tools, should write: ...
    Gruß hpvw
     
    Warum gibt (fast) keiner im Datenbankforum an, welches DBMS er benutzt?
    Ich gehe im Zweifelsfall ohne Nachfrage von MySQL > 4.1 i.V.m. PHP aus.
    Gewöhnt euch bitte auch an, die Fehlermeldung von mysql_error() zu posten.

  11. #11
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Das werd ich mir mal anschauen muessen.
    Ich hab eh schon ein paar Ideen fuer eine verbesserte Version.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  12. #12
    Registriert seit
    Apr 2002
    Ort
    HH
    Beiträge
    3.224
    Zitat Zitat von Dennis Wronka
    Das werd ich mir mal anschauen muessen.
    Ich hab eh schon ein paar Ideen fuer eine verbesserte Version.
    Mit Ideen kann ich auch dienen:
    • Zeilenumbruch bei 80 Zeichen?
    • Inline-Elemente nicht umbrechen?
    Ich wünsche Dir viel Spaß. Ich hatte das auch mal vor, aber in der Planung schon aufgegeben. Soviel Aufwand für die Fehlersuche hat mich dann doch nicht gereizt. Bei Fehlern "Hier" oder "grr" und hin und wieder einen Zeilenumbruch ausgeben hat bisher ja auch gelangt. Mit Templates (die ich meist bei größeren Sachen verwende) sieht es eh schon wieder anders aus, da der Output dann ohnehin weitestgehend vorformatiert ist. Von den Besuchern schaut sich ohnehin nur ein Bruchteil den Quelltext an und nach der Testphase kostet das nur Serverlast.

    Gruß hpvw
     
    Warum gibt (fast) keiner im Datenbankforum an, welches DBMS er benutzt?
    Ich gehe im Zweifelsfall ohne Nachfrage von MySQL > 4.1 i.V.m. PHP aus.
    Gewöhnt euch bitte auch an, die Fehlermeldung von mysql_error() zu posten.

  13. #13
    Nivida Tutorials.de Gastzugang
    hallo zusammen..

    Ich bin durch google auf diesen theard gekommen.. un de sist genau das was ich schon lange suche.. nur komm ich jetzt noch nichr ganz draus bei diesem PHP code .. von wo aus liesst der php code den html code ein ? komm irgend wie nicht ganz draus.. könnte man denn code noch kommentieren ?

    MFG nIVIDA
     

  14. #14
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    In meinem Fall war der HTML-Content in einer Variable. Diese habe ich einfach an die oben gepostete Funktion uebergeben und deren Rueckgabewert war dann meine Ausgabe an den Browser.

    Im Grunde ist's aber Quatsch so eine Funktion zu nutzen, den Browser interessiert's eh nicht ob der Code wie Kraut und Rueben aussieht. Und Google wohl auch eher nicht wuerde ich sagen.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.