Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] URLs umschreiben (https://www.delphipraxis.net/68623-%5Bphp%5D-urls-umschreiben.html)

jfheins 2. Mai 2006 20:12


[PHP] URLs umschreiben
 
Hallo erstmal,

ich bin mal wieder bei PHP und diesmal möchte ich gerne URLs umschreiben.

Genauer gesagt, habe ich den HTML-Quellcode und möchte jetzt (wahrscheinlich mit preg_replace()) alle links umschreiben sodass sie nicht mehr aucf die orginal-Seite zeigen sondern auf meine.

Also z.B. Seite http://server/dir/file.htm

Link auf datei.php >>> http://ich.de/script.php?url={http://server/dir/datei.php-base64encoded}
Link auf http://google.de >>> http://ich.de/script.php?url={http://google.de-base64encoded}

Also alle Links müssen:

- aufgelöst werden (relativ>absolut)

- base64encoded werden

- und dann als parameter zur URL des aktuellen Scripts angehangen werden.

Jetzt zu meinen Problemen:

Code:
#href=["'](.*)["']#gi
Das wäre mein Regex für die URL (im ersten Backref. zu finden) - ist der so ok ?

Und wie kann ich die möglicherweise relative URL auflösen ?

(Das encoden und anhängen krieg ich noch hin ... ;)

Flare 2. Mai 2006 20:15

Re: [PHP] URLs umschreiben
 
Kann auch sein, dass ich mich gewaltig irre, aber meiner Meinung nach werden alle Links bei der Ausgabe in absolute verwandelt...außerdem weißt du doch auf welcher Seite du dich befindest wenn du dort die Links überprüfst...


Flare

faux 2. Mai 2006 20:18

Re: [PHP] URLs umschreiben
 
Zitat:

Zitat von Flare
Kann auch sein, dass ich mich gewaltig irre, aber meiner Meinung nach werden alle Links bei der Ausgabe in absolute verwandelt...außerdem weißt du doch auf welcher Seite du dich befindest wenn du dort die Links überprüfst...

Bei der Ausgabe nicht, aber die meißten Browser machen das so, glaube ich.

Grüße
Faux

jfheins 2. Mai 2006 20:28

Re: [PHP] URLs umschreiben
 
:wiejetzt:

Ich habe HTML z.B.
Code:
[url="datei.htm"]Text[/url]
[url="http://google.de/dir/datei.htm"]Text[/url]
[url="/dir/datei.htm"]Text[/url]

[url="/datei.htm"]Text[/url]
[url="http://google.de/datei.htm"]Text[/url]
von http://google.de/dir/superseite.php

Und muss jetzt die ersten drei nach http://google.de/dir/datei.htm auflösen und die unteren beiden nach http://google.de/datei.htm - wie?

Und ist mein Regex richtig ? oder muss ich ihm irgendwie sagen, dass das abschließende ' bzw. " dasgleiche Zeichen ist, wie das anführende ?

jfheins 3. Mai 2006 22:20

Re: [PHP] URLs umschreiben
 
Also - das Problem bleibt :stupid:

nat 4. Mai 2006 01:38

Re: [PHP] URLs umschreiben
 
mit den relativen links kannst du doch ganz einfach checken:
gucke ob der link mit http:// anfängt, wenn nicht is es
ein relativer link und knallst einfach die url der seite dran.
(evtl gefolgt von einem /).

edit1:
ich hab dir das ma eben in php hingeknallt.
müsste eigentlich funzen, habs nur 1-2x getestet.

Code:
<?php      
   function ReplaceCallback($hit)
   {
      //$hit[1] = "|'
      //$hit[2] = http|ftp
      //$hit[3] = url
      
      global $currentURL;
   
      //protokoll angegeben?
      if(!empty($hit[2]))
         $url = "{$hit[2]}://";
      else
      {
         //relativer link, akt. url anfügen
         $url = $currentURL;
         if($hit[3][0] != '/') $url .= '/';
      }
      
      $url .= $hit[3];
      $url = base64_encode($url);
      
      $result = " href={$hit[1]}http://www.meine-seite/script.php?url=$url{$hit[1]}";
      return $result;
   }
   
   //die url, dessen html man grade liest
   $currentURL = 'http://www.google.de';
   
   //der reg. ausdruck (für ftp & http links)
   $expr = '# href=(\'|")(?:(http|ftp)://)?(.*)\1#i';
   
   //quelltext einlesen
   $html = file("./test.htm");
   $html = implode("", $html);
   
   //links ersetzen
   $html = preg_replace_callback($expr, ReplaceCallback, $html);
   
   //ausgabe
   echo $html;
?>

jfheins 4. Mai 2006 20:51

Re: [PHP] URLs umschreiben
 
Es geht soweit schon ... nur ist der regex ein bisschen zu greedy ...
Code:
$regex = '# href=(\'|")(http://)?(.*)\1#i';
Das isser ... und er nimmt z.B. als URL auch mal
Code:
http://www.server.com/" class="txt
aber danke schonmal ... ;)

cruiser 4. Mai 2006 22:02

Re: [PHP] URLs umschreiben
 
Mach ihn ungreedy (Modifier U)
Code:
$regex = '# href=(\'|")(http://)?(.*)\1#Ui';
Ich nehm den zusätzlichen Müll zurück *fg*

nat 5. Mai 2006 21:06

Re: [PHP] URLs umschreiben
 
edit: hatte sich schon erledigt, hatte was überlesen ;)


$expr = '# href=(\'|")(?:(http|ftp)://)?(.*?)\1#i';
müsste das ganze dann doch ungreedy machen (ungetestet)

edit2:
habs getestet, geht auch mit solchen links
Zitat:

Link



Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz