Ich weiß, dass ich sollte encodeURI jede Url an etwas anderes übergeben, weil ich dies lesen: http://www.digitalbart.com/jquery-and-urlencode/
Ich möchte die aktuelle Zeit des Titels, den ich gerade höre, weitergeben. Also habe ich den hervorragenden yoururls shortener installiert. Und ich habe ein bisschen Code, der alle Bits zusammenfügt und das Folgende macht: track=2&time=967
Da ich nicht möchte, dass jeder meinen privaten Schlüssel sehen kann, habe ich eine kleine php-Datei, die die Eingaben entgegennimmt und das Folgende anfügt, so dass es wie folgt aussieht: http://myshorten.example/yourls-api.php?signature=x&action=shorturl&format=simple&url=http://urltoshorten?track=2&time=967
Auf der Hauptseite rufe ich also das jquery von $("div.shorturl").load(loadall);
Es tut dann ein wenig von CURL und dann shortener gibt eine schöne kurze URL.
Zum Beispiel so:
$myurl='http://myshorten.example/yourls-api.php?signature=x&action=shorturl&format=simple&url=' . $theurl;
$ch = curl_init($myurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
if ($data === false) {
echo 'cURL failed';
exit;
}
echo $data;
Alles perfekt.
Außer... die URL, die gekürzt wird, hat immer die Form http://urltoshorten?track=2 - alles nach dem kaufmännischen Und-Zeichen wird gekürzt.
Ich habe versucht, die gesamte URL in php's URLencode einzuschließen, ich habe track=2&time=967 sowohl in encodeURI als auch in encodeURIComponent eingeschlossen, ich habe sogar versucht, die ganze Sache in eine oder beide einzuschließen. Und trotzdem bricht das & ab, obwohl ich sehen kann, dass die übermittelte URL am Ende wie track=1%26time%3D5 aussieht.
Wenn ich diese oder sogar die "einfache" Version mit der unverschlüsselten URL entweder in die yoururls-Benutzeroberfläche einfüge oder sie über die API als normale URL, die in die Adressleiste des Browsers eingefügt wird, an yoururls übermittle, funktioniert es wieder perfekt.
Es ist also nicht yoururls Schuld, es scheint, wie die URL richtig kodiert wird, das einzige, was ich denken kann, ist CURL möglicherweise?
An dieser Stelle werden Sie vielleicht denken: "Warum nicht das & durch ein * ersetzen und dann wieder zurück konvertieren? OK, also wenn die URL erweitert wird, erhalte ich die Werte von
var track = $.getUrlVar('track');
var time = $.getUrlVar('time');
Ich KÖNNTE also die Zeitvariante verlieren, dann ein bisschen suchen, wo das * in der Spur ist, und dann davon ausgehen, dass der Rest von allem nach * die Zeit ist, aber das ist ein bisschen hässlich, und mehr auf den Punkt, es ist nicht wirklich der richtige Weg, Dinge zu tun.
Wenn mir jemand helfen könnte, wäre ich sehr dankbar.