![]() |
SELFHTML Forumsarchiv |
|
|
Die folgende Nachricht zum Thema stammt von: asdf (Robert), 30. 12. 2003, 21:46
Hallo!
Ich wollte gerade alle Teile in einem String die mit <?php beginnen bis ?> mit "irgendetwas anderem" ersetzten.
Code:
ereg_replace("<\?php.*\?>","aaa",$string);
Wenn ich als $string jetzt habe:
<?phpdasfasdf?> funktioniert alles prächtig.
Wenn ich habe:
<?php fsadfasd ?> ?>
will ich das "aaa ?>" zurückgegeben wird. Es wird vom ersten "<?php" bis zum letzten "?>" im $string alles ersetzt es soll aber
nur von einem "<?php" bis zum nächsten "?>" alles ersetzt werden.
Kann mir einer sagen wie ich das machen kann?
Danke
MFG Robert
Die folgende Nachricht zum Thema stammt von: Alfred, 30. 12. 2003, 22:18
Hallöchen,
Probiers mal mit
( Schnellschuß, keine Gewähr ;-) )
<\?php.+?\?>
also statt ".*" ".+?"
( Oh mann diese Syntax... )
Besten Gruß,
Alfred
Die folgende Nachricht zum Thema stammt von: Cheatah, 30. 12. 2003, 22:25
Hi,
»» es soll aber
»» nur von einem "<?php" bis zum nächsten "?>" alles ersetzt werden.
Greediness, siehe andere Antwort. Das hilft aber auch nicht gegen
<?php echo "?>" ?>
oder
<?php ereg_replace("<\?php.+?\?>","aaa",$string) ?>
Du bist an die Grenzen von Regular Expressions gestoßen und möchtest ein Parsing vornehmen. Oder Dein Vorhaben durch etwas anderes ersetzen.
Cheatah
--
X-Will-Answer-Email: No
X-Please-Search-Archive-First: Absolutely Yes
Die folgende Nachricht zum Thema stammt von: Alfred, 30. 12. 2003, 22:44
Hallo Cheatah!
»»
»» Das hilft aber auch nicht gegen
»» <?php echo "?>" ?>
»» oder
»» <?php ereg_replace("<\?php.+?\?>","aaa",$string) ?>
Klasse - da hab ich nun so _gar nicht_ dran gedacht... ;-)
Also muß er verschachtelte Vorkommen der Suchbedingung vermeiden - vielleicht mit ( um bei diesem Beispiel zu bleiben ):
<?php ereg_replace($blabla,"aaa",$string) ?>
mit
$blabla = "<\?php.+?\?>"; // geht das überhaupt?
und ansonsten "<" und ">" die als Text gemeint sind ( denn woher sollten sie sonst kommen ) maskieren ( mit "<" etc.) ?
Interessiert mich....
Gruß,
Alfred
Die folgende Nachricht zum Thema stammt von: Cheatah, 30. 12. 2003, 22:49
Hi,
»» Also muß er verschachtelte Vorkommen der Suchbedingung vermeiden
also das Vorkommen der Suchbedingung im PHP-Code.
»» $blabla = "<\?php.+?\?>"; // geht das überhaupt?
Macht keinen Unterschied. Du kannst links "<?php" und rechts "?>" hinzufügen - ist exakt das selbe.
»» und ansonsten "<" und ">" die als Text gemeint sind ( denn woher sollten sie sonst kommen ) maskieren ( mit "<" etc.) ?
Das ist nur möglich innerhalb von HTML - und dort sogar nötig. Also keine Veränderung.
»» Interessiert mich....
A propos Veränderung: Die Suchbedingung muss verändert werden, und jedes andere Vorkommen der Zeichenkette, beispielsweise durch Stringverknüpfung oder Maskierung. Und zwar in _jedem_ Script, welches durchsucht werden soll - ob von Robert oder nicht. Nein, er möchte ein Parsing durchführen, keine RegExp verwenden. Oder sein Vorhaben an sich modifizieren.
Cheatah
--
X-Will-Answer-Email: No
X-Please-Search-Archive-First: Absolutely Yes
Die folgende Nachricht zum Thema stammt von: asdf (Robert), 31. 12. 2003, 14:55
Hallo!
<\?php.+?\?>
Danke erstmal!
Zuerst ging garnichts mit dem .+? hier.
Dann habe ich gelesen das das mit ereg_replace nicht geht.
Also habe ich preg_replace verwendet. Alles klappt wie es soll, bis auf eine kleinigkeit.
Hier erstmal ein klieiner Quelltext den ich geschrieben hab damti man es sich besser vorstellen kann:
<?php
import_request_variables('gp','url_');
echo preg_replace("<\?php.+?\?>","aaa",$url_name);
?>
<form action="login.php" method=post>
<textarea name="name">
</textarea>
<input type="submit">
</form>
Anwendung: http://ikt.bg9.at/~rchiryai/login.php
das Problem ist nach denm Ersetzten sollte aus solchen Zeichenketten:
"<?php irgendwas ?>"
das hier werden:
"aaa"
es wird aber:
"<aaa>" <--- das sieht man wenn man dann den Quelltext betachtet.
Koennt ihr mir sagen warum das so ist?
Und wenn möglich hätte ich gern gewusst wo ich nachlesen kann wie .+? arbeitet.
Danke Robert
Die folgende Nachricht zum Thema stammt von: asdf (Robert), 31. 12. 2003, 14:57
»» Anwendung: http://ikt.bg9.at/~rchiryai/login.php
schlim schlimm schlimm
Falsche addresse
http://ikt.bg9.at/~rchiryai/az/login.php
Die folgende Nachricht zum Thema stammt von: MudGuard, 01. 01. 2004, 12:35
Hi,
»» das Problem ist nach denm Ersetzten sollte aus solchen Zeichenketten:
»» "<?php irgendwas ?>"
»» das hier werden:
»» "aaa"
»» es wird aber:
»» "<aaa>" <--- das sieht man wenn man dann den Quelltext betachtet.
weil < und > im regulären Ausdruck für Wortanfang und Wortende stehen. Dein RE matcht also nur
?php irgendwas ?
- und ersetzt auch nur diesen Teil.
Wenn die < und > nicht als Wortanfang/-ende gedacht sind, sondern als tatsächliche Zeichen, müssen sie - genauso wie die ? - escapet werden.
cu,
Andreas
--
MudGuard? Siehe http://www.mud-guard.de/
Die folgende Nachricht zum Thema stammt von: asdf (Robert), 02. 01. 2004, 18:31
Hallo,
»» »» das Problem ist nach denm Ersetzten sollte aus solchen Zeichenketten:
das Problem ist, dass ich einfach noch keine Ahnung von preg_replace hatte.
Escapen von < und > machts nicht.
Aber wenn man !<\?php(.+?)\?>!, auf die Rufzeichen deutend, benutzt
geht alles hervorragend.
Gutentag Robert
© 1998-2006
Impressum, Software: Classic Forum