ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

PHP-jQuery,Ajax和&难题

2019-12-09 21:34:53  阅读:513  来源: 互联网

标签:ampersand variables curl javascript php


我知道应该将传递给其他任何URL的任何URL编码为URI,因为我读到以下内容:
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

因此,在主页中,我调用了$(“ 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中,我已经尝试将整个东西包装在一个或两个中.
而且,&破坏了它,即使我可以看到提交的URL最终看起来像track = 1&time = 5.

如果我将此版本甚至带有未编码url的“普通”版本粘贴到yoururls界面中,或通过api作为普通URL粘贴到浏览器的位置栏中,通过api提交到yoururls,则它仍然可以正常工作.

所以这不是yoururls的错,似乎url编码正确,我唯一想到的可能是CURL吗?

现在,您可能会在思考“为什么不将&替换为*,然后再次将其转换回去?”.
好的,所以当扩展网址时,我从

var track = $.getUrlVar('track');
var time = $.getUrlVar('time');

因此我可能会丢失时间var,然后对*的轨迹进行一些查找,然后假设*之后的所有时间都是时间,但这有点丑陋,更重要的是,这并不是真的正确的做事方式.

如果有人可以帮助我,将不胜感激.

解决方法:

I have tried wrapping the whole URL in php’s URLencode

这确实是您必须要做的(假设使用“ URL”,您是指将内部URL作为外部URL的组成部分进行传递).每当您在URL组件中输入值时,无论您设置的值是否为URL,都需要进行URL编码.

$myurl='http://...?...&url='.rawurlencode($theurl);

(对于这样的查询参数,urlencode()可以,但是对于路径部分,rawurlencode()也是可以的,因此,除非您真的需要空格看起来稍微漂亮一些[vs],否则默认情况下我会选择rawurlencode().)

这将为您提供最终网址,例如:

http://myshorten.example/yourls-api.php?signature=x&action=shorturl&format=simple&url=http%3A%2F%2Furltoshorten%3Ftrack%3D2%26time%3D967

您应该能够验证的作品.如果不是,则yourls-api.php出问题了.

标签:ampersand,variables,curl,javascript,php
来源: https://codeday.me/bug/20191209/2097144.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有