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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
Wechsel zu
Die letzten Beiträge aus diesen Forum
|
|