Mit php quellcode formatieren

hello everyone,
ich kenn das noch von “damals”, als ich mit JSF gearbeitet hatte, da gabs die möglichkeit, denn quellcode, bevor er zum client gesendet wurde, formatieren zu lassen.

gibts sowas für php auch? ieine funktion, oder eine date, die man includiert oder sowas in der art? oder die möglichkeit, mit htaccess was zu konfigurieren, so dass der häuptling das erledigt?

mfg
emil

Was meinst du jetzt genau mit ‘quellcode formatieren’?
Der Quelltext eines PHP-Skriptes wird normalerweise ausgeführt und
dann wird das Ergebnis davon abgesendet. Der Nutzer sieht also
nichts vom PHP-Quelltext.
Die Ausgabe formatiert man am besten mit CSS, wenn es sich um
(X)HTML oder ähnliches handelt.
Wenn man hingegen wirklich den Quelltext ausgeben lassen will
ohne ihn ausführen zu lassen, geht das z.B. mit der Wahl der
entsprechenden Dateiendung beziehungsweise des Dokumenttyps
(ehemals MIME-Typ), dann weiß der Apache+PHP, daß
dies nicht interpretiert werden soll. Es gibt wohl auch Optionen,
mit denen die Ausgabe dann als bunt dekoriertes (X)HTML erfolgt.
Wenn man den Quelltext hingegen ohne Interpretation in eine
(X)HTML-Ausgabe einbetten will, kann man sowas wie file,
file_get_contents, readfile oder ähnliche verwenden, dann maskiert
man vor der Ausgabe besser die Sonderzeichen, wofür es
verschiedene Möglichkeiten mit oder ohne PHP gibt.
Wenn man die Datei in eine Zeichenkette gelesen hat, kann man
diese natürlich beliebig mit allem nachbearbeiten, was PHP so
hergibt, bevor man das ausgeben läßt.

ich meine nicht die seite mit css oder den quellcode der php-datei, also nicht

<?php
 echo "test";
?>

sondern, wenn das php interpretiert worden ist, das möchte ich dann formatieren, wenn ich also echo “

test

” ausgeben, wird das auch so in dem quelltext angezeigt, den der client erhält. diesen möchte ich dann formatieren, mit zeilenumbrüchen und einrückungen.

wenn du zb hier im forum kontext-menü -> seitenquelltext anzeigen lässt, DEN möchte ich formatiert haben. (ohne in php voher mit \n und \t und so zeugs extra diese umbrüche & co einfügen zu müssen).

etwas dumm zu formulieren, ich hoffe du hastes verstanden g;

php.net/manual/en/book.tidy.php

Ich verstehe was du meinst. Du willst aus deinem echo ein schön eingerücktes HTML haben.

Wenn du nur echo verwenden willst muss ich dich leider enttäuschen. Es gibt in php leider keine weiteren Parameter mit denen man es steuern kann.

Aber PHP hat ja einen XML-Parser zum schreiben und lesen von XML. Dieser hat 2 interessante Funktionen

XMLWriter::setIndentString
und
XMLWriter::setIndent

Mit diesen kannst du ein eingerücktes XML Schreiben.

Jetzt ändern wir das ganze etwas für HTML ab.

[code]<?php
$memory = xmlwriter_open_memory();
xmlwriter_set_indent($memory, true);

xmlwriter_start_dtd($memory,‘html’);
xmlwriter_end_dtd($memory);

xmlwriter_start_element ($memory,‘html’); //
xmlwriter_start_element($memory,‘head’); //
xmlwriter_write_element ($memory,‘title’, ‘Indent document’);
xmlwriter_end_element($memory); //

xmlwriter_start_element($memory,‘body’); //
xmlwriter_start_element($memory,‘ul’); //

    xmlwriter_write_element ($memory,‘li’, ‘One Item’);
    xmlwriter_write_element ($memory,‘li’, ‘Another Item’);
    xmlwriter_write_element ($memory,‘li’, ‘Another Item’);

    xmlwriter_end_element($memory); //


xmlwriter_end_element($memory); //
xmlwriter_end_element($memory); //

xmlwriter_end_dtd($memory);
$xml = xmlwriter_output_memory($memory);

echo($xml);
?>[/code]Die Einrückungen werden jetzt von xmlwriter_set_indent() erledigt. Mit einer kleinen Klasse könnte sich der Mehraufwand durchaus lohnen.

Edit:
Verfügt tidy über ein automatisches einrücken? Den sonst könnte man es ja direkt mit dem heredoc oder
nowdoc syntax schreiben.

Du kannst das doch einfach so hinschreiben:

echo "
<html>
  <head>
    <title>Titel</title>
  </head>
  <body>
    <p>
      test
    </p>
  </body>
</html>";

Es zwingt dich doch niemand, alles in eine Zeile zu schreiben, was
ausgegeben werden soll ;o)

Wobei dies hier sinnvoller ist:

<?php
# irgendwelcher PHP-Kram
$meinTitel='Titel';
$meinTestText='test';
?>
<html>
  <head>
    <title><?php echo $meinTitel ?></title>
  </head>
  <body>
    <p>
      <?php echo $meinTestText ?>
    </p>
  </body>
</html>
<?php
# irgendwelcher optionaler weiterer PHP-Kram
?>

mach ich auch so :wink:
nur (zb bei schleifen) stimmt dann das erste element nicht, zb

<meta blablabla />
  <meta blablabla />
  <meta blablabla />
  <meta blablabla />

und ich wars leid immer \n und so machen zu müssen, da hatte ich einfach gehofft, dasses da ne magische simple einfache lösung gibt, die den ganzen kram automatisch macht :wink:

Zwar nicht die eleganteste Lösung aber mit der short Synstax würde es gehen

[code]<?php
$meta = array(
‘charset=“utf-1”’,
‘charset=“utf-2”’,
‘charset=“utf-3”’,
‘charset=“utf-4”’);
?>

<?php foreach ($meta as $item): ?> /> <?php endforeach; ?>
    <?php foreach ($meta as $item): ?>
  • <?php echo $item; ?>
  • <?php endforeach; ?>
[/code]

das war ein gedanke, ja, aber ich glaube das macht mehr arbeit / unübersichtlichkeit als es die ganze sache wert ist… (ich will ja auch noch den phpcode entziffern können^^)

Dann weis ich auch nicht mehr weiter. Entweder du beglückst dich oder den Leser. Wobei wohl wieder die Regel aufkommt sauberer PHP Code vor leserlicher HTML Ausgabe.

Ich würd’ mir da nicht so einen Kopf drum machen … „Lesbarkeit“ von HTML-Code für Menschen ist heute kein so besonders wichtiges Kriterium mehr.
Wenn es um Fehlersuche geht, wird man heutzutage eh sowieso selten das HTML anschauen, sondern eher das DOM mit einem Inspector-Tool wie bspw. Firebug betrachten - und dabei ist egal, ob der HTML-Code „schön“ eingerückt ist, oder nicht. (Und den Validator, der bei jeglicher Fehlersuche die erste Stufe ist, interessiert das auch nicht.)

Auch bei JavaScript und CSS geht der Trend (zumindest was den an den Client ausgelieferten Code angeht) ja weg von der Lesbarkeit, und hin zu “minified” Code, zwecks Geschwindigkeitsoptimierung. (Wobei auch in der Hinsicht eingerückter/lesbar formatierter Code natürlich kein Hindernis ist, gzip reißt das wieder raus.)

Und wenn wirklich mal die Notwendigkeit bestehen sollte, sich das HTML mit eigenen Augen anzuschauen - dann kann man dann immer noch lokal ein Tool wie tidy o.ä. verwenden, um den Code vorher entsprechend „schön“ zu machen.

Dafür serverseitig Rechenzeit zu verbraten, halte ich jedenfalls für ziemlich unsinnig.

jo, danke trotzdem =)

ich denk ich setz die priorität mal auf mich, die meisten werden eh die seite und nicht den zugrundeliegenden code ansehen :stuck_out_tongue: (edit, wie chrisb schon gesagt hat - werde auch ich eher selten da reinschaun)

aber wie gesagt… wär schön gewesen, aber ich kann auch gut ohne leben :wink:

[closed]

Das Thema ist schon lange gegessen und verdaut… aber es gibt immer wieder solche wie ich, die sich die selbe Frage stellen und mit der hier gebotene Hilfe nicht wirklich bedient sind.

Ich habe kurz mit Steuerzeichen experimentiert <?php echo "\n\tTabulator\nNeue Zeile"; ?> bring das gewünschte Resultat… klappt mit Gänsefüsschen aber nicht mit Hochkomma… wieso auch immer!

Quelltext:

Tabulator Neue Zeile

Browser-Anzeige:
TabulatorNeue Zeile

Hi seo,

der Beitrag ist schon knapp 5 Jahre alt :slight_smile: .
Der Unterschied zwischen einem Anführungszeichen und einem Hochkomma (Apostroph) ist, das PHP das Anführungszeichen durch einen Parsevorgang jagt.
Das heißt, das man in einem Anführungzeichen auch Variabeln hinterlegen kann z.B. echo “Das ist ein $test Satz”. Wobei $test dann durch die jeweilige Variable ersetzt wird.
Bei einem Hochkomma, wird dies nicht geparsed. Somit würde der echo Befehl so ausgegeben werden --Das ist ein $test Satz.—, ohne Variable.

Daraus resultiert, das wenn mehr Quellcode geschrieben wurde, dass das Script länger braucht, wenn hier Anführungszeichen verwendet werden, anstatt Hochkommas.
Mehr Informationen findet man hier: http://de.php.net/manual/de/language.types.string.php