Willkommen in der Webstatt
User-1 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?

xyz-48ke für alle hilfreichen Ideen. Und ich hoffe ich nerve nicht zu sehr damit. :D

netcup.de Warum gibt es hier Werbung?
User-1 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...

User-2 am 15.05.06 20:06

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

User-1 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*

User-2 am 15.05.06 20:15

In deinem Template tummeln sich aber einige Sonderzeichen..

User-3 am 15.05.06 21:15

[dok]preg_quote[/dok]

Und damit die Sonderzeichenlastigen Strings maskieren lassen :)

User-1 am 16.05.06 16:45

Quote
Original von xyz-145
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???

User-2 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

User-1 am 16.05.06 17:07

Perfekt. Vielen xyz-48k, xyz-145. 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