Datenschutzerklärung

Subsets in Blogs und CMSs validieren

Validome - Forum

Startseite Validome
RSS 2.0  
Sie sind nicht angemeldet. Atom 1.0  
Forum Home / Sonstige Technologien /

Subsets in Blogs und CMSs validieren

  Beitrag schreiben
Autor
Beitrag Seiten: 1
haka
Mitglied

Ort: Emden
Registriert: 01.08.2006
Beiträge: 22
Moin,

anfangs war ich etwas erschreckt über die Fehler, die mir von der vorherigen Version von Validome angezeigt wurden. Inwischen bin ich aber begeistert!

Bei Blogs oder Content Management Systemen besteht häufig das Problem, dass der Anwender alles Mögliche an Code eingeben kann, egal ob HTML, XHTML oder frei erfunden. Im besten Fall werden Tags noch korrigiert.

Darum hab ich an PHP-Lösungen für unsere CMSs (PHP Trawler Web CMS, WebsoziCMS) gebastelt, mit dem ich ein Subset einigermaßen validieren und filtern kann. Dabei wird für einen eingege4ben Text ein Subset definiert, also welche Tags und Attribute zugelassen sind. Z.B. lässt sich damit Javascript komplett filtern, fehlende /> und alt-Attribute ergänzen, Entities korrigieren oder im Template verwendete Ids sperren. Ich erzeuge dafür Arrays mit regulären Ausdrücken aus dem Qeulltext. Kein XML-Parser also.

Mein Problem ist allerdings die Verschachtelung von Tags. Darum suche ich nach ähnlichen Lösungen, um Ideen zu sammeln. Sollten aber Open Source sein.

Aber vielleicht bietet ja auch mal Validome Scripts für solche Zwecken an ;-)


_______________________________________
PHP Trawler Web CMS - http://trawler.msdazu.de
CMSBlog - http://cmsblog.msdazu.de

01.08.2006 00:45:18
http://cmsblog.msdazu.de Zitieren
HTMELL
Administrator

Registriert: 11.05.2006
Beiträge: 544
Hallo,
ohne jetzt großartige darüber nachgedacht zu haben, währe dies evt. ein Ansatz zur Problemlösung ohne einen DTD/Schema-Validator zu bemühen:
Man legt zunächst eine Liste mit allen erlaubten parent/child-Kombinationen an; Z. B.
span/a
span/b
span/i
span/img
usw.
d.h. alle Tags mit den erlaubten Kindelementen.
Als nächstes jagt man das XHTML (nur damit funktioniert es) durch den PHP-XML-Parser; der meldet dann schon mal die gröbsten Fehler (Syntax und Wohlgeformtheitsfehler).
Und nun bewegt man sich per Rekursion (mit DOM) durch den kplt. Dokumentenbaum und überprüft ob die jeweilige Parent/Child-Konstellation in der obigen Liste vorhanden ist. Wenn nicht, hast Du einen Verschachtelungsfehler.
Das ganze könnte man auch auf Attribute ausweiten, das Groß der Arbeit besteht aber im Anlegen der Liste.


_______________________________________
mfg
Thomas Mell

www.validome.org

01.08.2006 01:56:10
  Zitieren
haka
Mitglied

Ort: Emden
Registriert: 01.08.2006
Beiträge: 22
Ich hab eine "PHP-DTD" mit einem Array aller Child-Elemente. Auf den XML-Parser hab ich verzichtet, weil er bei Fehlern abbricht. Wenn die Leute 4 oder 5 Fehler im Code haben und die Eingabe müsste für jeden Fehler neu geladen werden, wäre das frustrierend.

Aber vielleicht sollte ich aufgreifen, die Childelemente erst dann zu prüfen, wenn alle anderen Tests ohne Mucken durchgelaufen sind. Genau da lag mein Hauptproblem: Wenn Tags nicht geschlossen wurden, kam ich nicht weiter, weil der Tag-Level nicht mehr stimmte.


_______________________________________
PHP Trawler Web CMS - http://trawler.msdazu.de
CMSBlog - http://cmsblog.msdazu.de

01.08.2006 12:41:38
http://cmsblog.msdazu.de Zitieren
haka
Mitglied

Ort: Emden
Registriert: 01.08.2006
Beiträge: 22
Da die Scripte für das Forum zu mächtig sind, hab ich sie online gestellt:

PHP-DTD
http://spdnet.sozi.info/extras/scripts/xhtml1-strict.dtd.php.txt

Funktionen
http://spdnet.sozi.info/extras/scripts/checkFunctions.php.txt


_______________________________________
PHP Trawler Web CMS - http://trawler.msdazu.de
CMSBlog - http://cmsblog.msdazu.de

01.08.2006 12:54:17
http://cmsblog.msdazu.de Zitieren
HTMELL
Administrator

Registriert: 11.05.2006
Beiträge: 544
Hallo,
>Genau da lag mein Hauptproblem: Wenn Tags nicht geschlossen wurden, kam ich nicht weiter, weil der Tag-Level nicht mehr stimmte.
Dafür brauch man doch nur eine billige Wohlgeformtheitsprüfung, das kann man mit ein paar RegExp machen - das zuletzt geöffnete Tag MUß als erstes geschlossen werden (empty-Tags, z.B. <br/> muß man dabei gesondert behandeln. Einen Stapel mit den bereits geöffneten Tags anlegen um zu wissen welches als nächstes geschlossen werden muß. Kleiner Tip, schau Dir mal den Parameter "offset" in preg_match an...


_______________________________________
mfg
Thomas Mell

www.validome.org

01.08.2006 14:49:15
  Zitieren
haka
Mitglied

Ort: Emden
Registriert: 01.08.2006
Beiträge: 22
Is ja mit RegExp gemacht. Ob ich nun mit offset einzelne Tags rauspicke oder ein komplettes Array erzeuge ist dabei mehr oder weniger egel. Auch empty-Tags werden unabhängig behandelt.

Aber ich bin für jeden Mitdenker dankbar! Vielleicht komme ich jetzt auch weiter ;-)


_______________________________________
PHP Trawler Web CMS - http://trawler.msdazu.de
CMSBlog - http://cmsblog.msdazu.de

01.08.2006 16:18:48
http://cmsblog.msdazu.de Zitieren
Seiten: 1   Beitrag schreiben
Wechsel zu

Die letzten Beiträge aus diesen Forum

Valid HTML 4.01