Jquery,ajax和&符号难题

时间:2010-08-18 17:05:21

标签: php javascript variables curl ampersand

我知道我应该将任何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);

的jquery

然后它会做一点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,然后做一些关于*在轨道中的位置,然后在*之后假设剩下的任何东西,但是它有点难看,而且更重要的是,它是不是真正做事的正确方法。

如果有人能帮助我,我们将不胜感激。

2 个答案:

答案 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

这当然只是胡言乱语。