URL mit Parameter bei GET Übergabe
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aufruf
code
funktion
glauben
http
index
info
jagen
letzte parameter
parameter
performance
status
string
teil
teilen
text
typ
url
zeichen
zerlegen
-
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
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
<a href="seite.php?id=1234&typ=A&url=<?php echo(urlencode('http://example.de?wert=555&info=xyz&status=1')); ?>">Link</a>
-
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. -
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. -
copynpaste schrieb:
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.
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. -
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 -
spdata schrieb:
Das funktioniert so:
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 ?<a href="seite.php?id=1234&typ=A&url=<?php echo(urlencode($link)); ?>">Link</a>
-
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 ?!
-
spdata schrieb:
Woher hast du den Link? Kein normaler Mensch erstellt sich SO einen Link wo das Argument nicht urlencoded ist.
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.
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
die URL abtrennen.$url = substr($link, $position_von_url + 4);
-
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 ?!
-
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. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage