preg_replace - Funktioniert nicht
Picco
- php
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 :)
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
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
wie maskiere ich die "?" denn?
Wie jedes andere Steuerzeichen eines PCRE auch. Tipp: das englische Wort dafür ist "escaping".
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
$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 :(
jetzt geht es :)
$a = preg_replace( '!<\?php echo \$sprache; \?>!', $sprache, $a );
vielen dank für die hilfen
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

--
Nur selber lernen macht schlau
<http://bergpost.annerschbarrich.de>
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