我知道我应该对传递给其他任何东西的任何 url 进行编码,因为我读到了这个: http ://www.digitalbart.com/jquery-and-urlencode/
我想分享我正在收听的当前曲目的当前时间。所以我安装了优秀的 yoururls 缩短器。而且我有一些代码将所有位放在一起,并进行以下操作:track=2&time=967
因为我不希望每个人都看到我的私钥,所以我有一个小 php 文件,它接受输入并附加以下内容,所以它看起来像这样: http://myshorten.example/yourls-api.php?signature= x&action=shorturl&format=simple&url=http://urltoshorten?track=2&time=967
所以在主页中,我调用了jquery$("div.shorturl").load(loadall);
然后它会做一点 CURL,然后缩短器返回一个不错的短 URL。
像这样:
$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;
都完美。
除了... 缩短的 URL 始终采用http://urltoshorten?track=2的形式- 缩短 & 符号之后的任何内容。
我已经尝试将整个 URL 包装在 php 的 URLencode 中,我已经将 track=2&time=967 包装在 encodeURI 和 encodeURIComponent 中,我已经尝试将整个东西包装在一个或两个中。即使我可以看到提交的网址最后看起来像 track=1%26time%3D5 , & 仍然会破坏它。
如果我将此或什至带有未编码 url 的“普通”版本粘贴到 yoururls 界面中,或者通过 api 将其作为粘贴到浏览器位置栏中的普通 URL 提交到 yoururls,它再次完美运行。
所以这不是你的网址有错,似乎网址编码正确,我唯一能想到的可能是 CURL?
现在,您可能会想“为什么不将 & 替换为 *,然后再将其转换回来?”。好的,所以当 url 展开时,我从
var track = $.getUrlVar('track');
var time = $.getUrlVar('time');
所以我可以丢失时间变量,然后查找 * 的位置,然后假设 * 之后的任何内容都是时间,但这有点难看,更重要的是,它并不是真正的正确的做事方式。
如果有人可以帮助我,将不胜感激。