Teil von  SELFPHP
Professional CronJob-Service

Suche

International PHP Conference


WebTech Conference


:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

Fragen rund um die Themen PHP?
In über 130.000 Beiträgen finden Sie sicher die passende Antwort!  

 
PHP Summit


Software Architecture Summit


:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 
HTML5 Days


JavaScript Days


:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
Tags in Variablen ersetzen

Am Ende der Seite finden Sie das komplette Beispiel als Download.

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.



 


Dieses Skript aus dem SELFPHP KOCHBUCH wurde von SELFPHP unter dem "Tarif Mc500" von McAc.net-Webhosting erfolgreich ausgeführt und getestet!

Auf der Übersichtseite unter "McAc.net – Webhosting zu diesem Buch" finden Sie weitere Informationen zu dem Webhostingpaket, dass durch SELFPHP getestet wurde.




 

Download

Info   ZIP BZIP2 TARGZ
Größe   843.00 Byte 969.00 Byte 919.00 Byte

Alle Beispiele als PHP-Datei(en)

Hier haben Sie die Möglichkeit, sich sämtliche auf dieser Seite gezeigten Beispiele als PHP-Dateien direkt downzuloaden.

Umständliches Copy & Paste ist daher nicht mehr notwendig, da alle Beispiele sofort ausprobiert werden können.

Sie haben bei der Auswahl der bereitgestellten Downloads mehrere Möglichkeiten, je nachdem welches Komprimierungsverfahren Sie bevorzugen.

Zurück zur Übersichtsseite


 




:: Premium-Partner ::

Webhosting/Serverlösungen

MECO Systemhaus GmbH & Co. KG weitere Premium-Partner
 

:: SELFPHP Sponsor ::

Zend Technologies GmbH weitere Sponsoren
 

:: Buchempfehlung ::

PHP 5.3 & MySQL 5.1

PHP 5.3 & MySQL 5.1 zur Buchempfehlung
 
 

Ausgewählter Tipp im Bereich PHP-Skripte


Spezielle Filtermechanismen für Dateien und Verzeichnisse

Weitere interessante Beispiele aus dem SELFPHP Kochbuch finden Sie im Bereich PHP-Skripte
 

SELFPHP Code Snippet


Array in ein PHP5 Objekt konvertieren

Weitere interessante Code Snippets finden Sie auf SELFPHP im Bereich PHP Code Snippets
 
© 2001-2014 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt
© 2005-2014 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de