Picco: preg_replace - Funktioniert nicht

Hallo,
ich importiere eine Datei in eine andere und lasse nach Dingen filtern (klappt an sich wunderbar) aber ich kann einen bestimmten string einfach nicht raus filtern und ich weiß nicht warum

in der Navi steht es so(funktioniert bestens):

  
<ul>  
	<li><a href="1.php?sprache=<?php echo $sprache; ?>">1</a></li>  
	<li><a href="2.php?sprache=<?php echo $sprache; ?>">2</a></li>  
	<li><a href="download.php?sprache=<?php echo $sprache; ?>">Download</a></li>  
</ul>

dann wird die navi nach error.php importiert und gefiltert(funktioniert bis auf eine Sache auch gut - Nur eben die letzten beiden preg_replace funktionieren nicht):

/*seiten import*/  
	$a = file_get_contents('./navi.php');  
	$a = preg_replace( '!<a href="#">(.*)</a>!', '<u>\\1</u>', $a );  
	$a = preg_replace( '!class="nav"!', '', $a );  
	$a = preg_replace( '!%3C?php%20echo%20$sprache;%20?%3E!',  $sprache, $a );  
	$a = preg_replace( '!<?php echo $sprache; ?>!',  $sprache, $a );  
	echo $a;

im Quellcode steh es so:

  
<ul>  
	<li><a href="1.php?sprache=%3C?php%20echo%20$sprache;%20?%3E">1</a></li>  
	<li><a href="2.php?sprache=%3C?php%20echo%20$sprache;%20?%3E">2</a></li>  
	<li><a href="download.php?sprache=%3C?php%20echo%20$sprache;%20?%3E">Download</a></li>  
</ul>

im link steht es so:
http://piccoterra.cwsurf.de/download.php?sprache=<?php echo $sprache; ?>

und eigentlich sollte
http://piccoterra.cwsurf.de/download.php?sprache=de
oder
http://piccoterra.cwsurf.de/download.php?sprache=en
da stehen

weis jm was ich falsch gemacht habe?

schon mal danke fürs lesen ich freue mich auf die antworten :)

  1. Hi,

    $a = preg_replace( '!%3C?php%20echo%20$sprache;%20?%3E!',  $sprache, $a );
    $a = preg_replace( '!<?php echo $sprache; ?>!',  $sprache, $a );

    Das Fragezeichen hat in einem regulären Ausdruck Sonderbedeutung - also musst du es maskieren, wenn du es nicht in dieser benutzen willst.
    Und wieso notierst du im Suchausdruck %20 und %3C, wenn im zuvor gezeigten Text, den du durchsuchen willst, einfache Leerzeichen und < stehen?

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Und wieso notierst du im Suchausdruck %20 und %3C, wenn im zuvor gezeigten Text, den du durchsuchen willst, einfache Leerzeichen und < stehen?

      weil %20 und %3C im quellcode der auf der seite erscheint steht.

      wie maskiere ich die "?" denn?

      und danke für die schnelle Antwort

      1. wie maskiere ich die "?" denn?

        Wie jedes andere Steuerzeichen eines PCRE auch. Tipp: das englische Wort dafür ist "escaping".

      2. Hello,

        wie maskiere ich die "?" denn?

        Das steht alles im Manual unter http://de.php.net/manual/en/book.pcre.php

        $a = preg_replace( '!<?php echo $sprache; ?>!',  $sprache, $a );

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. $a = preg_replace( '!<?php echo $sprache; ?>!',  $sprache, $a );

          ich hab das mit copy n past genau so übernommen aber es geht trotzdem nicht.
          hier ist übrigens die seite:
          http://piccoterra.cwsurf.de/error.php?sprache=de

          es macht nichts anders als vorher auch :(

          1. jetzt geht es :)

              
            	 $a = preg_replace( '!<\?php echo \$sprache; \?>!',  $sprache, $a );
            

            vielen dank für die hilfen

            1. Hello,

              jetzt geht es :)

              $a = preg_replace( '!<?php echo $sprache; ?>!',  $sprache, $a );

              
              >   
              > vielen dank für die hilfen  
                
              \*vor den Kopf klatsch\*  
                
              Klar. Ich hatte vorhin noch darüber nachgedacht, on das $-Zeichen auch escaped werden müsste und war zu dem Schluss gekommen: für PHP ist das hier nicht nötig. Stimmt auch, weil Du die einfachen Anführungszeichen als Stringbegrenzer benutzt.  
                
              Aber für den regulären Ausdruck muss das $-Zeichen selbstverständlich escaped werden, weil es darin sonst "Stringende" bedeuten würde  
                
              Manchmal ist es besser, wenn man die Scheuklappen abnimmt zum Lesen :-)  
                
                
                
                
              Liebe Grüße aus dem schönen Oberharz  
                
                
              Tom vom Berg  
              ![](http://selfhtml.bitworks.de/Virencheck.gif)  
                
              
              -- 
              Nur selber lernen macht schlau  
              <http://bergpost.annerschbarrich.de>
              
          2. Hi,

            $a = preg_replace( '!<?php echo $sprache; ?>!',  $sprache, $a );
            ich hab das mit copy n past genau so übernommen aber es geht trotzdem nicht.

            Na ja, wenn die spitzen Klammern und Leerzeichen im zu durchsuchenden Text URL-kodiert sind [1], dann musst du sie natürlich auch so wieder in den Suchausdruck reinschreiben.

            [1] War mir vorher nicht klar, weil du erst mal den Beispielcode gepostet hast, wo sie unkodiert waren.

            MfG ChrisB

            --
            Light travels faster than sound - that's why most people appear bright until you hear them speak.