Teil von  SELFPHP
Letztes Update: 14.09.2007 09:07:01

Navigation

Seite Startseite
Seite Aktuelles
Seite Seite News*
Seite Seite Pressemitteilungen*
Seite SELFPHP
Seite Seite Über SELFPHP
Seite Seite Werbung
Seite Seite Kontakt
Seite Seite Unsere Banner
Seite Seite Impressum
Seite Qozido
Seite Seite Diving Edition
Seite Seite Snorkeling Edition
Seite SELFPHP Dokumentation
Seite Seite PHP-Skripte
Seite Seite PHP Befehlsreferenz
Seite Seite PHP 5 Praxisbuch
Seite Seite PHP Code Snippets
Seite Seite SELFPHP in Buchform
Seite Anbieterverzeichnis
Seite Seite Globale Branchen
Seite Seite Webhosting/Server
Seite Services
Seite Seite Forum*
Seite Seite RSS-Feeds*
Seite Seite Downloads*
Seite Seite Gratis-Video-Lektionen*
Seite Seite SELFPHP auf Heft-CD*
Seite Seite Newsletter*
Seite Internet Security
 sponsored by  
Seite Stellenangebote*
Sedo - Bei uns wird PHP großgeschrieben
Seite Premium-Partner   
Webhosting/Serverlösungen
Seite Produktempfehlung   
Seite Seite SteadyBackup

 
* Link führt ins Internet


Anbieterverzeichnis
Informieren Sie sich über die Unternehmen in unserem Anbieterverzeichnis!  
 


SELFPHP Forum
Fragen rund um die Themen PHP? In über 100.000 Beiträgen finden Sie sicher die passende Antwort!*  


Newsletter
Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!*

Vorname: 
Name:
E-Mail:
 




 

Tags in Variablen ersetzen


Systemvoraussetzung

  • Linux
  • Windows
  • PHP 3 >= 3.0.9
  • PHP 4
  • PHP 5
  • PCREBibliothek

Datei(en)

template_tags.php

Problem

Sie haben eine Variable gefüllt mit HTML-Quellcode, Text und z. B. UBB-Code. Gerade in Foren wird diese Variante sehr gerne genutzt, also eigene Tags zu definieren und diese dann mit regulären Ausdrücken zu durchsuchen. Die Treffer werden dann meist mit CSS-Definitionen oder wie hier im Beispiel mit DIV-Tags ersetzt.

Lösung

Zur besseren Veranschaulichung sehen Sie nachfolgend eine mögliche Variante von solchen Tags. Es geht darum, den Namen der Tags, also hier z. B. „outerLoop“ und „innerLoop“, beizubehalten, jedoch die Tags selbst durch DIV-Tags zu ersetzen.

26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
Hier steht auch Text
[loop name="outerLoop"]  
<table>
<tr>  
    <td>  
        <table>  
[loop name="innerLoop"]  
            <tr>  
                <td>  
                    Hier steht der eigentliche Text 
                </td>  
            </tr>  
[/loop]  
        </table>  
    </td>  
</tr>  
</table>
und hier noch mehr
[/loop]
Beispiel 4.5: template_tags.php

Mit str_replace() (48) ersetzen wir zuerst alle schließenden Tags von „loop“ durch die schließenden Tags von „div“. Zudem müssen wir die Tags finden, die den eigentlichen Namen enthalten, sodass wir auch diese durch DIV-Tags erstzen können.

Der Aufbau der Tags beginnt immer mit einer eckigen Klammer, gefolgt von den Namen „loop“, dann einem Leerzeichen und dem öffnenden Bereich „name=“. Der Tag schließt stets mit einer eckigen Klammer.

Nun müssen wir noch die Ausnahmen generieren, falls etwa die Schreibweise ein wenig abweicht und eventuell z. B. vor „loop“ ein Leerzeichen steht. Außerdem müssen wir den Text vor und nach unseren Suchtreffern beibehalten.

Wir bauen den regulären Ausdruck zusammen (48) und lassen diesen dann solange durch eine while-Schleife (50) laufen, bis es keine Treffer mehr gibt. Bei jedem Treffer ersetzen wir (51) den gesuchten Wert durch unsere DIV-Tags und fügen zusätzlich unseren bestehenden Text ($pat[1] und $pat[6]) mit ein. Der Name von „loop“ (hier innerLoop und outerLoop) fügen wir ebenfalls wieder in den DIV-Tags ($pat[4]) ein.

Dieser Vorgang wird solange durchgeführt, bis kein Suchtreffer mehr vorhanden ist. Erst danach können wir unsere modifizierte Variable ausgeben (54) und haben im Quellcode die ersetzten DIV-Tags.

25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
$str 
Hier steht auch Text
[loop name="outerLoop"]  
<table>
<tr>  
    <td>  
        <table>  
[loop name="innerLoop"]  
            <tr>  
                <td>  
                    Hier steht der eigentliche Text 
                </td>  
            </tr>  
[/loop]  
        </table>  
    </td>  
</tr>  
</table>
und hier noch mehr
[/loop]   
'


$str str_replace ("[/loop]","</div>","$str"); 
$pattern '=^(.*)\[(.*)loop(.*)name\="?(\S+)"([^\]]*)\](.*)$=msi'

while (
preg_match($pattern$str$pat)){ 
  
$str $pat[1].'<div name="'.$pat[4].'">'.$pat[6]; 


echo 
$str
Beispiel 4.6: template_tags.php

Ausgabe im Browser

Hier steht auch Text
Hier steht der eigentliche Text
und hier noch mehr

Ausgabe im Quellcode

Hier steht auch Text
<div name="outerLoop">
<table>
<tr>
   <td>
      <table>
<div name="innerLoop">
      <tr>
         <td>
            Hier steht der eigentliche Text
         </td>
      </tr>
</div>
         </table>
      </td>
</tr>
</table>
und hier noch mehr
</div>

Sie können dieses Beispiel für Ihre Bedürfnisse so anpassen, dass auch dort die Tags geändert werden. Sie sollten aber immer mehrere Varianten ausprobieren, da es immer wieder zu kuriosen Ersetzungen kommen kann.



 




 sponsored by

Sedo - Bei uns wird PHP großgeschrieben


VERIO - An NTT Communications Company


HighText iBusiness


Webspace-Verkauf.de


video2brain




 Premium-Partner
 Webhosting/Serverlösungen

BPI-Systeme


Premium-Partner Pixel X


Premium-Partner First Colo


Premium-Partner dogado Internet




Qozido


© 2001-2008 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt