Willkommen in der Webstatt Zum Webstatt Blog und Stories
Dustwolf Dustwolf am 14.05.06 20:41

Da mein letzter Thread nicht sooooo super ausformuliert und wenig hilfreich war, fange ich hier nochmal grundlegend an.

<!-- ANFANG news -->
<table width="75%" class="rahmen">
<tr>
<td class="titelfeld">

{!titel}
</td>
</tr>
<tr>
<td>
Autor: {!autor} - ({!datum}) -
</td>
</tr>
<tr>
<td>

{!text}
</td>
</tr>
<tr>
<td>
{!link}
</td>
</tr>
</table><br>
<br>

<!-- ENDE news -->


Das ist der HTML Code im Template der Probleme macht. Folgender PHP-Code sollte das <!-- ... --> Zeugs eigentlich mit dem Inhalt drin zu {!news} editieren. Sobald aber das {!datum} geklammert wird, funktioniert das nicht mehr.
An Stellen wo der HTML-Code nicht ausgeschnitten wird um in später mehrfach wieder einzusetzen, passiert kein Fehler.
Allerdings wenn das Klammerproblem in so einem Codeblock auftritt, dann ersetzt er den Block nicht mehr.... Woran kann das liegen? Hier der entsprechende PHP-Code:

preg_match_all('#<!--\s*ANFANG\s*(\w*)\s*-->(.*)<!--\s*ENDE\s*(\\1)\s*-->#s',
$this->template,
$elemente);
for($i = 0; $i < count($elemente[1]); $i++){
$this->objekte[$elemente[1][$i]] = &new template($elemente[2][$i], '',2);
$this->objekte[$elemente[1][$i]]->vorlage($elemente[2][$i]);
$this->template = preg_replace('#<!--\s*ANFANG\s*'.$elemente[1][$i].'\s*-->'.$elemente[2][$i].'<!--\s*ENDE\s*'.$elemente[1][$i].'\s*-->#s',
'{!'.$elemente[1][$i].'}',
$this->template);
}


Wieso tritt so ein Fehler auf? Wieso bricht er das ausschneiden da einfach ab und lässt den Code wie oben in der direkten Form stehen?

Danke für alle hilfreichen Ideen. Und ich hoffe ich nerve nicht zu sehr damit. :D

netcup.de Warum gibt es hier Werbung?
Dustwolf Dustwolf am 15.05.06 15:50

Kann mir denn keiner helfen? :-( Das macht mich fertig. Wenn ich das nicht löse, war die ganze Arbeit für die Katz...

milahu milahu am 15.05.06 20:06

Du musst die Regex-Sonderzeichen ($ ^ { [ ( | ) ] } * + ? \ ) escapen.

Dustwolf Dustwolf am 15.05.06 20:11

Aber im ersten Regex sind doch keine falschen Sonderzeichen mehr und im zweiten müsste es doch egal sein. Da wird die geschwungene Klammer doch nur eingefügt...

Ich glaube, ich muss das Tutorial schon wieder lesen. *arghs*

milahu milahu am 15.05.06 20:15

In deinem Template tummeln sich aber einige Sonderzeichen..

Wasili am 15.05.06 21:15

[dok]preg_quote[/dok]

Und damit die Sonderzeichenlastigen Strings maskieren lassen :)

Dustwolf Dustwolf am 16.05.06 16:45

Quote
Original von milahu
In deinem Template tummeln sich aber einige Sonderzeichen..


Und damit hat RegEx Probleme? Das im RegEx selbst keine Sonderzeichen sein dürfen verstehe ich ja und es macht Sinn. Aber in dem Text, den er durchsuchen soll... Das ist doch irgendwie am Sinn vorbei, oder reden wir aneinander vorbei???

milahu milahu am 16.05.06 16:56

Wenn ich das richtig sehe, wird $elemente[2][$i] ins Suchmuster eingebaut -- völlig unnötig und langsam in der Ausführung.
#<!-- ANFANG '.$elemente[1][$i].' -->.*?<!-- ENDE '.$elemente[1][$i].' -->#s
.. sollte reichen

Dustwolf Dustwolf am 16.05.06 17:07

Perfekt. Vielen Dank, milahu. Auch wegen der warscheinlich etwas sinnleeren und ahnungslosen Nachfragen.

Aber die Idee den Inhalt nicht aus dem Array zu nehmen, sondern neu suchen zu lassen, hat bestens funktioniert. Nun ist der Fehler weg. :D

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt