kostenloser Webspace werbefrei: lima-city


URL mit Parameter bei GET Übergabe

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    spdata

    spdata hat kostenlosen Webspace.

    Hallo

    ich möchte über einen Link einen Parameter übergeben,
    der wiederum eine URL mit Parametern enthält

    index.php?id=1234&typ=A&url=http://example.de?wert=555&info=xyz&status=1

    dann kommt als $_GET Werte an:

    Array
    (
        [id] => 1234
        [typ] => A
        [url] => http://example.de?wert=555
        [info] => xyz
        [status] => 1
    )


    ich will aber, dass als $_GET ankommt

    Array
    (
        [id] => 1234
        [typ] => A
        [url] => http://example.de?wert=555&info=xyz&status=1
    )


    wie mache ich das so, dass die mit url= übergebene URL komplett mit allen Parameter ankommt ?
    Danke


  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    <a href="seite.php?id=1234&typ=A&url=<?php echo(urlencode('http://example.de?wert=555&info=xyz&status=1')); ?>">Link</a>
  4. urlencode :)

    Im Übrigen sei gesagt, dass das NICHT mit mod_rewrite funktioniert. Aber das interessiert dich wahrscheinlich nicht :p
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Natürlich kannst du manuell alle Zeichen wie &, %, ?, ..., durch das entsprechende %xx ersetzen. Dies ist aber umständlich und nicht flexibel einsetzbar.
    Die PHP-Funktion urlencode() ist hier die beste Wahl.
  6. Mir würde spontan folgendes einfallen:

    Anstatt "http://example.com?v1=text&v2=nichts" zu GETen vielleicht einfach [...]&url=http://example.com+v1=text+v2=nichts" und dieses dann mit PHP an jeweils den "+" zu teilen um danach wieder ordentlich mit "?" und "&" zusammenzusetzen.

    Hoffe ich konnte helfen.
  7. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    copynpaste schrieb:
    Mir würde spontan folgendes einfallen:

    Anstatt "http://example.com?v1=text&v2=nichts" zu GETen vielleicht einfach [...]&url=http://example.com+v1=text+v2=nichts" und dieses dann mit PHP an jeweils den "+" zu teilen um danach wieder ordentlich mit "?" und "&" zusammenzusetzen.

    Hoffe ich konnte helfen.
    Vergiss das und verwende einfach urlencode(). Genau für solche Aufgaben ist diese Funktion programmiert worden und dann kommen leute wie copynpaste und wollen puren Pfusch erstellen, nur weil sie nicht wissen wofür sich die PHP-Entwickler urlencode ausgedacht haben und wie man das einsetzen muss.
  8. Autor dieses Themas

    spdata

    spdata hat kostenlosen Webspace.

    Hallo

    urlencode wäre schon gut

    leider habe ich die URL, die ich als Parameter anhängen will, nicht einzeln

    also den Link bekomme ich so als string

    $link = 'http://example.org/somedir/index.php?id=1234&typ=A&url=http://example.de?wert=555&info=xyz&status=1';


    also müsste ich den erst zerlegen, damit ich den url Parameter einzeln habe
    um diesen dann durch urlencode() zu jagen .... explode oder preg_match ?

    mal grobe Schätzung mit explode()

    $urlparatmp = explode('&url=',$link); 
    $link_neu = $urlparatmp[0].'&url='.urlencode($urlparatmp[1]);


    ob das hinhaut ?!

    ... setzt wohl auch vorraus, das &url= der letzte Parameter in $link ist




    Beitrag zuletzt geändert: 16.1.2012 22:41:10 von spdata
  9. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    spdata schrieb:
    leider habe ich die URL, die ich als Parameter anhängen will, nicht einzeln

    also den Link bekomme ich so als string

    $link = 'http://example.org/somedir/index.php?id=1234&typ=A&url=http://example.de?wert=555&info=xyz&status=1';


    also müsste ich den erst zerlegen, damit ich den url Parameter einzeln habe
    um diesen dann durch urlencode() zu jagen .... explode oder preg_match ?
    Das funktioniert so:
    <a href="seite.php?id=1234&typ=A&url=<?php echo(urlencode($link)); ?>">Link</a>
  10. Autor dieses Themas

    spdata

    spdata hat kostenlosen Webspace.

    Hallo

    ich glaube Du hast dabei übersehen, dass nicht $link der Link im url Parameter ist,
    sondern der komplette Link, der diesen url Parameter aber auch andere enthält.

    ..../index.php?id=1234&typ=A&url=http://example.de?wert=555&info=xyz&status=1

    Problem ist, wie gesagt, ich habe nur den kompletten Link, und nicht den url Parameter einzeln


    Nochmal das Beispiel mit explode()

    $link = 'http://example.org/somedir/index.php?id=1234&typ=A&url=http://example.de?wert=555&info=xyz&status=1';
    
    $urlparatmp = explode('&url=',$link);  
    
    $link_teil1 = $urlparatmp[0];     // --- Link Teil vor &url= 
    $link_teil2 = $urlparatmp[1];     // --- Link Teil nach &url= 
    
    $link_neu = $link_teil1.'&url='.urlencode($link_teil2);
    
    echo '<a href="' . $link_neu . '">KLICK</a>';


    das funktioniert aber nur, wenn der Parameter url der letzte Parameter im Link ist
    wenn die Parameter anders verteilt sind, dann klappt das so nicht mehr mit explode

    BSP:
    ..../index.php?id=1234&url=http://example.de?wert=555&info=xyz&status=1&typ=A
    (hier ist &typ=A der letzte Parameter, also würde dieser in $link_teil1 fehlen .... )

    daher dachte ich an ein preg_match, der den url Parameter ausliest
    aber weil im url Parameter ja auch & Zeichen enthalten sind,
    kann ich nicht suchen nach & um das Ende des url Parameter zu finden

    ich hoffe das Problem ist jetzt (besser) verstanden .... :)

    da werde ich wohl sicher stellen müssen, das der url Parameter immer der zuletzt angehängte ist
    damit es mit der explode() Methode funktioniert, oder hat jemand doch noch ne Idee ?!

  11. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    spdata schrieb:
    ich glaube Du hast dabei übersehen, dass nicht $link der Link im url Parameter ist,
    sondern der komplette Link, der diesen url Parameter aber auch andere enthält.
    Woher hast du den Link? Kein normaler Mensch erstellt sich SO einen Link wo das Argument nicht urlencoded ist.

    Wenn du dir selbst den Link erstellt hast erstell ihn dir noch einmal mit urlencode().

    Wenn du dir den Link nicht selbst erstellt hast und die URL der LETZTE Parameter im Link ist kannst du nach url= suchen und ab dort mit
    $url = substr($link, $position_von_url + 4);
    die URL abtrennen.
  12. Autor dieses Themas

    spdata

    spdata hat kostenlosen Webspace.

    ok, beide Varianten funktionieren, das mit explode() und das mit substr()

    habe es mal jeweils in eine Funktion gepackt

    (1) mit explode()

    function deeplink_encode1 ($link, $deepid='&url=') { 
      $deepos = strpos($link, $deepid); 
        if ($deepos === FALE) { $neulink = $link; }
        else { 
          $urltempar = explode($deepid,$link);  
          $link_teil1 = $urltempar[0]; 
          $link_teil2 = $urltempar[1]; 
          $neulink = $link_teil1.$deepid.urlencode($link_teil2);
        }
    return $neulink;
    } 
    
    // ----------------------------------------------------------- 
    
    $new_link = deeplink_encode1($longlink,'&url=');



    (2) mit substr()

    function deeplink_encode2 ($link, $deepid='&url=') { 
      $deepos = strpos($link, $deepid);  
        if ($deepos === FALE) { $neulink = $link; }
        else { 
          $deeplen = strlen($deepid);
          $link_teil1 = substr($link, 0, $deepos); 
          $link_teil2 = substr($link, $deepos + $deeplen); 
          $neulink = $link_teil1.$deepid.urlencode($link_teil2); 
        }
    return $neulink;
    } 
    
    // ----------------------------------------------------------- 
    
    $new_link = deeplink_encode2($longlink,'&url=');



    jetzt würde ich gerne wissen, welche der beiden Funktionen schneller ist,
    bzw. welche weniger Ressourcen verbraucht (CPU / RAM / runtime ...) ... ?
    ... es sind pro Aufruf bis zu 50 Links zu prüfen


    und ob es besser ist, das Vorkommen von '&url=' vor Aufruf der Funktion zu prüfen
    und nur wenn das auch im $longlink vorkommt, dann die encode Funktion aufrufen


    ist das egal, ob ich diese Prüfung (ob '&url=' überhaupt im $longlink vorkommt)
    im Code oder in der Funktion mache, also was würde mehr Performance brauchen,

    Wenn ich vorher prüfe, kann ich die Prüfung innerhalb der Funktion zwar weglassen

    function deeplink_encode2a ($link, $deepid='&url=') { 
      $deepos = strpos($link, $deepid);  
      $deeplen = strlen($deepid);
      $link_teil1 = substr($link, 0, $deepos); 
      $link_teil2 = substr($link, $deepos + $deeplen); 
      $neulink = $link_teil1.$deepid.urlencode($link_teil2); 
        }
    return $neulink;
    }
    
    // ----------------------------------------------------------- 
    
    if (strpos($longlink, '&url=')) !== FALE) {
    $new_link = deeplink_encode2a($longlink, '&url='); 
    }
    else { 
    $new_link = $longlink; 
    }



    wenn ich einfach jeden Link durch einer der oberen encode Funktionen jage
    dann wird bei FALSE der encode-Teil in der Funktion ja auch nicht angewendet.

    kommt das auf das gleiche raus, Performance-Unterschiede?
    wie würdet Ihr es machen ?
    jeden Link vorher prüfen .... oder alle Links durch-jagen und innerhalb Funktion prüfen ?!


  13. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Woher hast du diese Links, die du decodieren möchtest?????
    Nachdem du sowohl den ersten Teil als auch den zweiten Teil von explode benötigst und mit substr nichts anderes machst als das Ergebnis von explode nachzubauen sollte beides ungefähr gleich schnell sein.

    Deine Bedenken bezüglich Performance: wenn du keine Seite wie Facebook hostest wo es auf Performance ankommt ist das hier ziemlich egal.
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!