Homepage selbermachen 7.847 Themen, 35.565 Beiträge

PHP Bastelaufgabe: Explode

pco / 5 Antworten / Flachansicht Nickles

Hallo,

ich habe einen teuflischen Plan ;-).

Ich habe eine sehr lange Tabelle in HTML. In dieser Tabelle kommen sporadisch TH-Tags vor. Ich möchte diese Tabelle an diesen Tags auftrennen und eine neue Tabelle daraus machen, um Seitenumbrüche zu ermöglichen.

Einfach: Mit Explode, - doch so leicht ist es nicht.

Denn die TH-Tags sind natürlich unterschiedlich "weit" von einandern entfernt. Manchmal nur eine Zeile.

Ich muss also nachdem ich Explode benutzt habe, die Tabelle u.U. wieder "zusammenkleben". Im Moment mache ich das auch genau so.

Es geht aber noch weiter. Gelegentlich sind diese Mammuttabellen selber nur teil einer Tabelle und durch das Zerlegen wird das Tag der umschliessenden Tabelle nicht geschlossen.

Auch das prüfe ich derzeit recht umständlich ab.

Gibt es einen einfachen Algorithmus für das Problem der Zerlegung mehrfach verschachtelter HTML-Tags in PHP?

Eventuell gar ein Script, welches mir einen Text an einer Beliebigen Stelle zerlegt und daraus zwei korrekte HTML-Texte macht?

bye

PCO

bei Antwort benachrichtigen
pco Borlander „Spontane Idee: Mittels Reg-Exps die THs aus inneren Tabellen erstzen, dann...“
Optionen

Die Lösung des Problems wäre ein rekursiver Algorithmus. Die sind aber in PHP nicht gestattet und ein Iterativer hat ein zu unhomogenes Laufzeitverhalten, welches bei sehr komplexen Tabellenkonstrukten schnell zu Timeouts führt - thats the problem.

Das Problem ist ferner, dass ich die Daten dabei nicht verändern kann / darf.
Meine derzeitige Lösung ist das trennen der Kette an jedem "Kleiner-Zeichen". Hierdurch habe ich, korrektes HTML voraus gesetz eine Trennung erreicht welche genauso viele öffnende, wie schliessende Tags am Beginn hat.

Dann prüfe ich die erste Stelle der Nachfolgekette auf einen Slash und vermerke im Feld: Hier wird mit einem Closetag begonnn (Feld[element][closetag] = 1) oder nicht (=0).

Ferner läuft ein Zähler mit, der die öffnenden Tags und schliessenden liest und speichert.
Auch der ist nicht einfach, da ja jedes Tag wieder Parameter enthalten kann.
Also durchlaufe ich jedes Feldelement auf der Suche nach dem ersten "Grösser-Zeichen" und schneide den entsprechenden Teil ab.
Nun speichere ich bereinigten Text und HTML-Tags in der Reihenfolge wie sie aufgetreten sind in ein Feld.

In diesem Feld checke ich die Zeichenkettenlängen bis ein Grenzwert erreicht ist.
Hier werden dann alle schliessenden Tags bis zum $TagCounter=0 angehängt.
In der darauffolgenden Zeichenkette werden alle öffnendenTags von $TagCounter bis 0 angehängt.

Fertig - sauber getrennt, alles kommt mit.
Scheisse kompliziert und absolut zu Serverlastig.

Das ist das Problem

PCO

bei Antwort benachrichtigen