Anzeige - [Interessiert an einer Anzeige?]
(?) Tags raten (?) (edit)
 
Reply to this topicStart new topicStart Poll
> [PHP] Teil einer URL autom. encodieren, urlencode in replacement von preg_replac
Manimal
blogger.hvbx.de
  Geschrieben am: Mi 2.07.2008, 19:33
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 168
Mitglied seit: 16.08.2005


Hallo Ayomer,

zur Abwechslung mal wieder eine Frage von mir. Diesmal aus dem Bereich der regulären Ausdrücke.

Im der ersten Zeile des Beispiel-Code seht ihr ein von mir geschriebenen regulären Ausdruck um den "Rattenschwanz" eines Links abzugreifen und dann "urlencoden".

Das Filtern funktioniert, leider aber nicht die Nutzung von urlencode im replacement-Teil.

CODE
$content = preg_replace('/"http:\/\/example.com\/click.asp\?ref=([a-z0-9&;=]*)"/i','"'.$var.'/file.php?mm=an&id=$1" class="link"',$content); // FUNKTIONIERT!

$content = preg_replace('/"http:\/\/example.com\/click.asp\?ref=([a-z0-9&;=]*)"/ie','"'.$var.'/file.php?mm=an&id='.urlencode("$1").'" class="link"',$content); // FUNKTIONIERT NICHT!


Hat jemand eine Idee wo der Fehler liegt oder kennt jemand vll eine ganz andere Möglichkeit?

An alle fleißigen Helfer voran vielen Dank!


--------------------
HVBX Blog - Was mich bewegt und was ich bewege...
AFFILIATE-WORLD.de steht zum Verkauf! (PR3) Jemand Interesse? Preis über PN.
Top
PMEmail PosterUsers Website
Top
 
 
jAuer
Jürgen Auer - freiberufl. Programmierer
#2 Geschrieben am: Mi 2.07.2008, 19:57 (+00:23)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 2176
Mitglied seit: 4.02.2006


In .NET ist es so, daß RegEx - Ausdrücke gesondert kompiliert werden, weil sie ja eine Art Programmiersprache darstellen.

Ich gehe davon aus, daß das in PHP ähnlich ist, weil das die Leistung massiv beeinflusst.

Damit sind aber in RegEx - Ausdrücken keine Funktionsaufrufe möglich, die erst zur Ausführungszeit ausgewertet werden.

Sprich: Du wirst das irgendwie trennen müssen.


--------------------
Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.

server-daten: Web-Datenbanken als Online - CRM - Lösung.
Konzentrieren Sie sich auf Ihr Kerngeschäft - nutzen Sie eine schlanke, schnelle Online-Datenbank von verschiedenen Standorten.
Top
PMEmail PosterUsers Website
Top
 
Manimal
blogger.hvbx.de
#3 Geschrieben am: Mi 2.07.2008, 20:06 (+00:08)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 168
Mitglied seit: 16.08.2005


Hallo Jürgen,

hatte mir schon gedacht dass du der erste bei diesem Thema bist wink.gif

Hatte auch schon gedacht das im replacement weitere PHP Code nicht erlaubt sind. Dann habe ich aber folgendes gelesen:

QUOTE
Modifier e (evaluate, execute)

Dieser Modifier gilt nur bei der Verwendung von preg_replace, in anderen PHP-Funktionen wird er ignoriert und bleibt ohne Wirkung. Ist er gesetzt, werden die Backreferences im Ersatzstring normal ersetzt, der Ersatz wird dann als PHP-Code ausgewertet, und die Rückgabe wird als eigentlicher Ersatzstring verwendet.

Quelle: http://regexp-evaluator.de/tutorial/modifier/#eval

Vielleicht verstehe ich das auch nicht richtig?


--------------------
HVBX Blog - Was mich bewegt und was ich bewege...
AFFILIATE-WORLD.de steht zum Verkauf! (PR3) Jemand Interesse? Preis über PN.
Top
PMEmail PosterUsers Website
Top
 
jAuer
Jürgen Auer - freiberufl. Programmierer
#4 Geschrieben am: Mi 2.07.2008, 20:16 (+00:10)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 2176
Mitglied seit: 4.02.2006


Na ja, wenn man da weiterliest, dann ist die Lösung ziemlich klar:

http://regexp-evaluator.de/tutorial/php-fu...n/preg-replace/

QUOTE
$inhalt = preg_replace('#\[url=(.*)\](.*)\[/url\]#Uise',
"'<a href=\"\\1\">'.strtoupper('\\2').'</a>'", $inhalt);


Du verwendest $1 statt \1 und Du mußt die '\' im Ersetzungsstring doppelt maskieren - wie wenn man mit C# arbeitet.


--------------------
Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.

server-daten: Web-Datenbanken als Online - CRM - Lösung.
Konzentrieren Sie sich auf Ihr Kerngeschäft - nutzen Sie eine schlanke, schnelle Online-Datenbank von verschiedenen Standorten.
Top
PMEmail PosterUsers Website
Top
 
trexpert
#5 Geschrieben am: Do 3.07.2008, 08:25 (+12:09)
Report PostQuote Post

AyomRank 2
****

Gruppe: Member (inaktiv)
Beiträge: 6
Mitglied seit: 3.07.2008


QUOTE (jAuer @ Mi 2.07.2008, 20:57)
In .NET ist es so, daß RegEx - Ausdrücke gesondert kompiliert werden, weil sie ja eine Art Programmiersprache darstellen.

Ich gehe davon aus, daß das in PHP ähnlich ist, weil das die Leistung massiv beeinflusst.

Damit sind aber in RegEx - Ausdrücken keine Funktionsaufrufe möglich, die erst zur Ausführungszeit ausgewertet werden.

Sprich: Du wirst das irgendwie trennen müssen.

PHP hat dafür seine eigene Lösung: preg_replace_callback

Diese Methode führt eine beliebige Funktion mit den gefundenen Audrücken als Parameter aus.


--------------------
Top
PMEmail Poster
Top
 
Manimal
blogger.hvbx.de
#6 Geschrieben am: Do 3.07.2008, 09:38 (+01:12)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 168
Mitglied seit: 16.08.2005


OK, erst einmal Danke für die Denkansätze. Durch eure Hilöfe bin ich jetzt zu einem, bzw sogar zwei Ergebnissen gekommen.

CODE

$content = preg_replace('/"http:\/\/example.com\/click.asp\?ref=([a-z0-9&;=]*)"/ie',"'$var/file.php?mm=an&amp;id='.urlencode('\\1').''",$content); // FUNKTIONIERT!

$content2 = preg_replace_callback('#\[url=(.*)\](.*)\[/url\]#Uis', 'encodeparameter', $content); // FUNKTIONIERT AUCH!


Aber welche ist nun schneller/effektiver/Ressourcen schonender?


--------------------
HVBX Blog - Was mich bewegt und was ich bewege...
AFFILIATE-WORLD.de steht zum Verkauf! (PR3) Jemand Interesse? Preis über PN.
Top
PMEmail PosterUsers Website
Top
 
jAuer
Jürgen Auer - freiberufl. Programmierer
#7 Geschrieben am: Do 3.07.2008, 10:23 (+00:45)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 2176
Mitglied seit: 4.02.2006


QUOTE (Manimal @ Do 3.07.2008, 09:38)
Aber welche ist nun schneller/effektiver/Ressourcen schonender?

Keine Ahnung. Aber es läßt sich testen:

Mache eine Schleife, in der eine Variante 1000 oder 10.000 mal ausgeführt wird und stoppe die Zeit.

Und gucke parallel dazu die CPU-Auslastung an, um zu sehen, ob eine Variante sehr CPU-lastig ist.


--------------------
Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.

server-daten: Web-Datenbanken als Online - CRM - Lösung.
Konzentrieren Sie sich auf Ihr Kerngeschäft - nutzen Sie eine schlanke, schnelle Online-Datenbank von verschiedenen Standorten.
Top
PMEmail PosterUsers Website
Top
 
trexpert
#8 Geschrieben am: Do 3.07.2008, 11:25 (+01:01)
Report PostQuote Post

AyomRank 2
****

Gruppe: Member (inaktiv)
Beiträge: 6
Mitglied seit: 3.07.2008


QUOTE (Manimal @ Do 3.07.2008, 10:38)
OK, erst einmal Danke für die Denkansätze. Durch eure Hilöfe bin ich jetzt zu einem, bzw sogar zwei Ergebnissen gekommen.

CODE

$content = preg_replace('/"http:\/\/example.com\/click.asp\?ref=([a-z0-9&;=]*)"/ie',"'$var/file.php?mm=an&amp;id='.urlencode('\\1').''",$content); // FUNKTIONIERT!

$content2 = preg_replace_callback('#\[url=(.*)\](.*)\[/url\]#Uis', 'encodeparameter', $content); // FUNKTIONIERT AUCH!


Aber welche ist nun schneller/effektiver/Ressourcen schonender?

Ich schätze mal das die callback langsamer ist. Die ist auch für komplexe Vorgänge gedacht.
Denn es muss ja vorher ne funktion aufgerufen werden vor dem urlencode.

Ich denke mal das es aber keinen bedeutenden Unterschied macht.


--------------------
Top
PMEmail Poster
Top
 
Manimal
blogger.hvbx.de
#9 Geschrieben am: Do 3.07.2008, 16:36 (+05:11)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 168
Mitglied seit: 16.08.2005


Hab dazu einen interessten Benchmark gefunden:
http://benchmark.nophia.de/benchmarks-text...lback-b-25.html

Der Gewinner scheint mir universeller zu sein, falls die Zukunft noch weitere Anforderungen an das Script stellt.

Daher werde ich wohl preg_replace_callback() nehmen.


--------------------
HVBX Blog - Was mich bewegt und was ich bewege...
AFFILIATE-WORLD.de steht zum Verkauf! (PR3) Jemand Interesse? Preis über PN.
Top
PMEmail PosterUsers Website
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/25196

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
MySQL Abfrage von einer Tabelle webdoktor 371 19 Sa 9.08.2008, 17:45
File-Backup einer infizierten Windows Box Sandro Feuillet 79 3 Mo 4.08.2008, 14:41
Fanseite einer TV-Serie giovanni 128 3 Mo 4.08.2008, 12:12
Php-Variable in einer Javascript-Datei Jan_cmp 176 3 Fr 25.07.2008, 17:34
Wollt ihr euch bei einer Frau verewigen....? Björn Kaiser 365 6 Fr 11.07.2008, 08:57
autom. SEO für nicht genutzte Domainen Huibert de Vet 345 8 Fr 13.06.2008, 15:35
Formular autom. in DB speichern radarin 276 4 So 8.06.2008, 03:07
Fragen zur Bezahlung von einer Leistung Casual 210 3 Di 20.05.2008, 21:06
2 Links von Euch in einer Geschichte? japsa 120 0 Sa 17.05.2008, 14:22




Anzeige - [Interessiert an einer Anzeige?]



Anzeigen


[Interessiert an einer Anzeige?]