TMS: preg_replace ???

Hallo,

lasse mit

$neu=preg_replace('/href="([^"]+)"/i','href="copyright.php?url=$1"',$alt);

alle href= einer eingelesenen Site $url ersetzen durch href="copyright.php?url=$1.

Dabei wird aber auch

<link rel="stylesheet" href="tmp/style.css" type="text/css">

ersetzte. Dies soll aber nicht sein. Was muss ich machen, damit ich keinen Style-Links ändere?

Weiterhin würde ich gerne zwischen relativen und absoluten Links unterscheiden, da ich ja sonst:

href="copyright.php?url=../test" oder so bekomme.

richtig wäre aber

href="copyright.php?url=$url/../test" !!

Kommem da nicht weiter.
Wär super,wenn jemand eine Idee hat ...

Gruß TMS

  1. Hallo TMS,

    lasse mit

    $neu=preg_replace('/href="([^"]+)"/i','href="copyright.php?url=$1"',$alt);

    alle href= einer eingelesenen Site $url ersetzen durch href="copyright.php?url=$1.

    Dabei wird aber auch

    <link rel="stylesheet" href="tmp/style.css" type="text/css">

    ersetzte. Dies soll aber nicht sein. Was muss ich machen, damit ich keinen Style-Links ändere?

    Indem die vorher einfach ne Abfrage mittels preg_match machst:

    if (preg_match ('href="(.*).css"', $alt) ) {
      //do nothing
    }
    else {
      //make regex substitution
    }

    (siehe http://www.php.net/manual/en/function.preg-match.php )

    Weiterhin würde ich gerne zwischen relativen und absoluten Links unterscheiden, da ich ja sonst:

    href="copyright.php?url=../test" oder so bekomme.

    richtig wäre aber

    href="copyright.php?url=$url/../test" !!

    Häh?

    was soll href="../dir1/bla" werden?
    und was href="/dir1/bla" (absolut) ?

    Naiv würde ich mal sagen, ihr könnt die Auswertung von relat und absoluten Pfaden doch in copyright.php machen?

    Versucht alle relativen Pfade in absolute zu wandeln, müßt ihr mal im Netz schauen, ich kann mich erinnern zu dem Thema was gelesen zu haben! ... wenn ich genau weiß, was ihr wollt, mach ich mir aber nochmal ein paar Gedanken.

    Liebe Grüße

    Martin

    1. Hallo Martin,

      wenn ich

      if (preg_match ('href="(.*).css"', $alt) ) {
        //do nothing
      }
      else {
        //make regex substitution
      }

      benutze, erhalte ich folgenden Fehler

      Warning: Delimiter must not be alphanumeric or backslash in /home/a1073-admin/www/dialekt/dialekt.php on line 85

      Versucht alle relativen Pfade in absolute zu wandeln, müßt ihr mal im Netz schauen, ich kann mich erinnern zu dem Thema was gelesen zu haben!

      Kann dazu aber leider nix brauchbares finden.

      wenn ich genau weiß, was ihr wollt, mach ich mir aber nochmal ein paar Gedanken.

      Will nur bevor die Daten in $alt durch

      $neu=preg_replace('/href="([^"]+)"/i','href="copyright.php?url=$1"',$alt);

      ersetzt werden, alle Links in absolute (d.h. der Form http://) umwandeln, damt ich mit dem Audruck copyright.php?url= wieder auf meinen Filter verweisen kann.

      Danke für Deine Hilfe,

      TMS

      1. Hallo Martin,

        wenn ich

        if (preg_match ('href="(.*).css"', $alt) ) {
          //do nothing
        }
        else {
          //make regex substitution
        }

        benutze, erhalte ich folgenden Fehler

        Warning: Delimiter must not be alphanumeric or backslash in /home/a1073-admin/www/dialekt/dialekt.php on line 85

        Hmm, der delimiter, ach, preg_match arbeitet ja nach Perl Regex Syntax, als Delimeter brauchen wir also ein nicht alphanum Zeichen z.B."/"

        (siehe http://www.php.net/manual/de/ref.pcre.php )

        probier mal:

        if (preg_match ("/href="(.*).css"/", $alt) ) {
        if (preg_match ("/href="(.*).css"/i", $alt) ) {
        für case-insensitive
        ...

        /href="(.*).css"/ delimeter ist /
        href="(.*).css" sollte dann auf alle Ausdrücke der Form
        href="lja23sdFKSADf.css" zutreffen.

        Versucht alle relativen Pfade in absolute zu wandeln, müßt ihr mal im Netz schauen, ich kann mich erinnern zu dem Thema was gelesen zu haben!

        Kann dazu aber leider nix brauchbares finden.

        wenn ich genau weiß, was ihr wollt, mach ich mir aber nochmal ein paar Gedanken.

        Will nur bevor die Daten in $alt durch

        $neu=preg_replace('/href="([^"]+)"/i','href="copyright.php?url=$1"',$alt);

        ersetzt werden, alle Links in absolute (d.h. der Form http://) umwandeln, damt ich mit dem Audruck copyright.php?url= wieder auf meinen Filter verweisen kann.

        also basedir sei http:://path/to/root/currentdir/
        und Du hast z.B. href="../image/"
        und du willst http:://path/to/root/image haben

        Also für das rootdir und das currentdir gibt es php variablen. Einfach in der Doku auf php.net schauen.
        Im Prinzip mußt Du nur bei allen ".." das letzte Verzeichnis vom currentdir löschen, bei "." einfach garnix machen, und dann den Rest des relativen Pfades anhängen.
        Beachtet, daß es aber auch absolute Pfade der Form "/CurrentDir/Dir2/" gibt!

        Liebe Grüße

        Martin