Hallo Mathias,
Sonderlich sinnvoll, jedes Markupschnipsel einzeln zu behandeln, ist es auch nicht:
echo(return xhtml-transform($murks));
Ich persönlich verwende ja sowieso fast ausschließlich Smarty, da könnte man 2 verschiedene Templates verwenden.
Immerhin sind die statischen Methoden, welche vordefinierten Code einbinden, welcher jeweils einmal in XHTML und einmal in HTML definiert ist, besser für den Gebrauch auf dynamischen Seiten, welche jedes Mal individuell erzeugt werden und dadurch die Zeit sowieso kritisch ist.
Da stimme ich Dir zu.
Das Erstellen der jeweils doppelten statischen Inhalte kann natürlich automatisiert werden, hier würde dann das Caching greifen. Falls sich der Timestamp der include-Datei geändert hat, kann das System die Versionen immer noch on-the-fly neu erzeugen.
Smarty besitzt eine sehr gute Caching-Funktion, ich denke, das wird keine Probleme geben.
a) Content-Type: text/html
b) s!<?xml.[^?]?>!!g
c) s! />!>!gGibt es eigentlich Unterschiede der DTDs von HTML 4.01 Strict und XHTML Strict gibt, welche XHTML-Markup zu invalidem HTML-Markup machen würden - mir fallen keine ein, man sollte aber darüber nachdenken.
Nein. XHTML 1.0 = HTML 4.01 bis auf die "Sache mit dem XML"[tm]. Zumindest wurde das mir immer gepredigt. ;)
d) s!xml:!!g (primär wg. xml:lang)
Je nach Eingabe müsste man wohl das ganze xml:lang-Attribut streichen, falls das Ausgangsdokument nach den Kompatibilitätsrichtlinien verfasst ist (muss es aber nicht beziehungsweise sollte es nicht, falls man eine Transformation vornehmen will).
Eben, ich denke, man kann prima xml:lang verwenden, das ist kein Problem.
e) s!xmlns(?::[^=]*)?="[^"]*"!!g (ist das so überhupt korrekt, als regulärer Ausdruck? - ich meine die 2 Doppelpunkte)
Ich verstehe nichts, ich kenne diese Syntax nicht... Soll das eine lookahead assertation sein...?
Nein, (hallo) machted hallo, (?:hallo) matched auch hallo, aber der Ausdruck steht dann nicht in $matches bzw. wird nicht einer Variable ($1, $2, etc.) fürs ersetzen zugewiesen. In dem Fall ist es eigentlich egal... (ich weiß aber immer noch nicht, ob die zwei Doppelpunkte valide sind, mal nachschauen)
Wozu zwei Doppelpunkte, der eine für xmlns:[namespace]="..." und der andere für die assertation? Diese Form kenne ich nicht.
Täusche ich mich oder würde folgendes ausreichen:
xmlns(:[^=]+)?="[^"]*"
Man müsste mal einen Benchmark machen, was schneller ist.
Es gibt doch keine »verschachtelten« Namespace-Angaben... http://www.w3.org/TR/REC-xml-names/#NT-NSAttName
f) s!<[CDATA[!<!--!g
Du solltest vielleicht andere delimiter verwenden... Es kommt nicht gut, wenn die Delimiter unmaskiert im Ausdruck auftauchen.
Ähm, ja, ich meinte natürlich s!<[CDATA[!<!--!g ;-)
Das mit den Delimitern ist so eine Sache, ich könnte natürlich so etwas wie ° verwenden, aber dann sehe ich die Trennung nicht mehr so gut - bei einem "großen" Zeichen wie ! oder / sieht man dagegen schon, wo der Ausdruck anfängt aus aufhört - naja, obwohl: preg_replace hat ja zwei Parameter für...
g) s!]]>!-->!g
Naja, setzt natürlich voraus, dass CDATA-Bereiche nur in script- und style-elementen verwendet werden,
Hmm, klar, aber ich kann nicht einfach noch Style/Script-Bereiche abfangen, dann könnte ich das Dokument gleich parsen...
h) s!<!DOCTYPE[^>]*>!<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">!g (meinetwegen auch Strict - hoffentlich hab' ich da alles richtig)
Siehe oben, Strict sollte aber möglich sein.
Naja, je nachdem, in welcher "Sprache" das Dokument ist - eine XHTML-Transitional-Dokument kannst Du nicht in ein HTML-Strict-Dokument umwandeln, zumindest nicht automatisch.
Lässt sich das Ganze nicht vereinfachen, indem man eine XSL-Transformation vornimmt, bei welcher nichts geändert wird und die Ausgabe schlichtweg HTML ist...?
Sicherlich, aber...
Die paar RegExps wären vermutlich perfomanter und nicht jeder hat einen XSLT-Prozessor auf dem Server zur Verfügung.
Genau das ist der Punkt. XSL ist "eleganter", aber langsamer und weniger weit verbreitet. preg_* hat jeder. (bzw. bei Perl ist das eingebaut)
Meintest du »Accept«...?
Ähhh, ja, war wohl schon ein bisschen müde...
Ja, ich denke schon. Momentan wäre es nur Mozilla, welchem XHTML ausgeliefert würde. Bei Amaya und Konqueror weiß ich es nicht.
Konqueror: ACCEPT: text/*, image/jpeg, image/png, image/*, */*
Amaya 6.4: ACCEPT: */*;q=0.1,image/svg+xml,application/mathml+xml,application/xhtml+xml
(über http://www.schroepl.net/cgi-bin/http_trace.pl)
Natürlich könnte man die veränderten Dokumente auch Cachen, damit der Server nicht jedes Mal ungeheuer belastet wird.
Bei generierten Seiten ist das wie gesagt nicht einfach.
Wenn man sowieso Templates verwendet und diese auch noch cached, sehe ich kein Problem.
Grüße,
Christian
Sollen sich alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen und nicht mehr davon erfasst haben als eine Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst.
-- Albert Einstein