2 unterschiedliche Doctypes bei PHP Inkludierung

Hallo,

ich benötige noch einmal eure fachmännische Hilfe.

Ich habe in einer meiner Dateien mit dem Doctype

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

ein PHP Script inkludiert. In dem besagtem PHP Script ist unter anderem folgender Quellcode hinterlegt:

echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"
\"http://www.w3.org/TR/html4/loose.dtd\">\n";
echo "<html>\n<head>\n";
...
...
echo "</body>\n\n</html>";

Nun ist die XHTML Datei allerdings nicht valide (u.a. kommt die Meldung: DOCTYPE" declaration not allowed in instance).

Frage: Hängt das mit den unterschiedlichen Doctype's zusammen und falls ja, wie muss ich vorgehen um das Dokument valide zu bekommen?

Es wäre super wenn mir hier jemand weiterhelfen könnte.

Besten Dank!
 
Hallo,

zwei DocTypes sind nicht valide, es kann nur einen geben ;)
Entscheide dich für einen und lösche den anderen raus.

Gruß
BK
 
Ich habe in einer meiner Dateien [...]

ein PHP Script inkludiert. In dem besagtem PHP Script ist unter anderem folgender Quellcode hinterlegt:
echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"
\"http://www.w3.org/TR/html4/loose.dtd\">\n";
echo "<html>\n<head>\n";
...
...
echo "</body>\n\n</html>";
In dem PHP-Script, das offensichtlich innerhalb des Dokumentkörpers <body>...</body> der Hauptseite zum Einatz kommt, dürfen ausschließlich diese HTML-Elemente enthalten sein, wie sie im <body>-Element eines (X)HTML-Dokuments gemäß der gewählten Dokumenttyp-Definition (DTD) als dessen Kindelemente vorkommen dürfen - siehe hierzu die Elementreferenz des body-Elements.

Die nachfolgend aufgeführten Tags zählen definitiv nicht als regelgültige Kindelemente des <body>-Elements:

  • <!DOCTYPE ...>
  • <html>...</html>
  • <head>...</head>
  • <title>...</title>
  • <meta ...>
  • <link ...>
  • <body>...</body>

Fazit: Nicht nur die includierte Doctype-Deklaration entfällt, sondern am Ende bleibt in deinem Script-Code nur der Teil stehen, der sich derzeit innerhalb des <body>...</body>-Bereichs befindet.
 
Zuletzt bearbeitet:
Vielen Dank für die ausführlichen und hilfreichen Antworten!

@spicelab: Wenn ich das dann richtig verstehe, muss ich im Script den Doctype sowie die nicht regelgültige Kindelemente entfernen. Darüber hinaus müsste ich dann wohl die HTML-Elemente zwischen <body> </body> auf die (X)HTML Regeln anpassen. Da kommt wohl eine Menge Arbeit auf mich zu :-(. Ich habe das mal im Ansatz und auf die Schnelle testweise versucht, nur dann haut es mir die Tabellenformatierungen (innerhalb des Scripts) raus. Da muss wohl viel nachgearbeitet werden.

Gibt es vielleicht alternativ eine andere Möglichkeit, z.B. die Einbindung per iFrame oder ähnliches?

Nochmals besten Dank und Gruß
 
Existiert evtl. für die Tabelle eine CSS-Formatierung im PHP-Script, die du von dort noch nicht in das Stylesheet des Hauptdokuments portiert hast?

Oder besitzt die Hauptseite ein Stylesheet zur Tabellenformatierung, das für die inkludierte Tabelle nicht gelten soll?

Neben dem iFrame bietet dir auch AJAX (JS) die Möglichkeit, Inhalte nachträglich in eine Seite zu laden.

Aber auch mit dieser Technik bleibt es dabei, nur die HTML-Elemente verwenden zu können, die im Dokumentkörper zulässig sind.

Lediglich mit dem eingebetteten Frame könntest du es bei einem herkömmlichen (X)HTML-Grundgerüst belassen.
 
Zuletzt bearbeitet:
Hi spicelab,

es gab in der Tat im PHP Script eine CSS Formatierung die ich hätte übernehmen müssen. Allerdings hat mich das gleich wieder vor das nächste Problem gestellt, denn im Script gab es stellenweise andere CSS Formatierungen für HTML Elemente, wie die, die ich im Hauptdokument verwendet habe. Nun habe ich das ganze doch per iFrame eingebunden. Ist vielleicht nicht die eleganteste Lösung, doch letztendlich läuft es und das Dokument ist valide :).

Vielen Dank für Deine Unterstützung.

VG
 

Neue Beiträge

Zurück