我知道我应该将任何url传递给其他任何url,因为我读到了这个: http://www.digitalbart.com/jquery-and-urlencode/
我想分享我正在听的当前曲目的当前时间。 所以我安装了优秀的yoururls缩短器。 我有一些代码将所有位放在一起,并做了以下事情: 轨道= 2及时间= 967
由于我不希望每个人都看到我的私钥,我有一个小的php文件接受输入,并附加以下内容,所以它看起来像这样: http://myshorten.example/yourls-api.php?signature=x&action=shorturl&format=simple&url=http://urltoshorten?track=2&time=967
所以在主页面中,我调用了$("div.shorturl").load(loadall);
然后它会做一点CURL,然后shortener会返回一个很好的短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;
一切都很完美。
除了......缩短的网址始终采用http://urltoshorten?track=2的形式 - 缩短&符后的任何内容。
我已经尝试在php的URLencode中包装整个URL,我在encodeURI和encodeURIComponent中包含了track = 2& time = 967,我已经尝试将整个内容包装在一个或两个中。 而且,&打破它,即使我可以看到提交的网址最后看起来像track = 1%26time%3D5。
如果我将这个或者带有未编码网址的“普通”版本粘贴到yoururls界面中,或者通过api将其作为粘贴到浏览器位置栏的普通网址提交给yoururls,那么它再次完美地运行
所以这不是你的错误,似乎网址被正确编码,我唯一能想到的就是CURL可能吗?
现在,您可能会想“为什么不用&替换&然后将其转换回来?”。 好的,所以当网址扩展时,我会从
中获取值var track = $.getUrlVar('track');
var time = $.getUrlVar('time');
所以我可能会失去时间var,然后做一些关于*在轨道中的位置,然后在*之后假设剩下的任何东西,但是它有点难看,而且更重要的是,它是不是真正做事的正确方法。
如果有人能帮助我,我们将不胜感激。
答案 0 :(得分:2)
我尝试在php的URLencode中包装整个网址
这确实是你必须做的(假设'URL'你的意思是内部URL作为外部URL的一个组件传递)。无论何时在URL组件中放置值,都需要进行URL编码,无论您设置的值是否为URL。
$myurl='http://...?...&url='.rawurlencode($theurl);
(urlencode()
对于这样的查询参数是可以的,但rawurlencode()
对于路径部分也没问题,所以除非你真的需要空格看起来更漂亮[+
vs {{1 }},我默认使用%20
。)
这将为您提供如下的最终网址:
rawurlencode()
您应该能够验证哪些作品。如果没有,则http://myshorten.example/yourls-api.php?signature=x&action=shorturl&format=simple&url=http%3A%2F%2Furltoshorten%3Ftrack%3D2%26time%3D967
出现问题。
答案 1 :(得分:1)
我已经尝试在php的URLencode中包装整个URL,我在encodeURI和encodeURIComponent中包含了track = 2& time = 967,我已经尝试将整个内容包装在一个或两个中。而且,&打破它,即使我可以看到提交的网址最后看起来像track = 1%26time%3D5。
对HTTP变量如何工作的解释可能会帮助你。
如果我收到包含以下变量和值的页面:
var1 = Bruce Oxford
var2 = Brandy&Wine
var3 = ➋➌➔ (unicode chars)
我们对var名称和var的值进行编码,即:
var1 = Bruce+Oxford
var2 = Brandy%26Wine
var3 = %E2%9E%8B%E2%9E%8C%E2%9E%94
我们没有做的是对分隔字符进行编码,因此上面的请求数据将是:
?var1=Bruce+Oxford&var2=Brandy%26Wine&var3=%E2%9E%8B%E2%9E%8C%E2%9E%94
而不是:
%3Fvar1%3DBruce+Oxford%26var2%3DBrandy%26Wine%26var3%3D%E2%9E%8B%E2%9E%8C%E2%9E%94
这当然只是胡言乱语。