在Javascript中将URL作为GET参数传递

12

我正在尝试制作一个书签小工具,它使用用户当前的URL,类似于使用此JavaScript代码的tinyURL书签小工具

javascript:void(location.href='http://tinyurl.com/create.php?url='+location.href)

所以我复制了那个东西并制作了

javascript:void(location.href='http://mywebsite.com/create.php?url='+location.href)

然后我使用:

$url=$_GET['url']; 

要获取它。问题是,如果我在一个已经存在一些get风格信息的URL上,就会搞乱一切。

例如,如果我在以下URL上:

http://www.google.ca/webhp?um=1&hl=en&safe=off

'_GET'代码将$url设置为

http://www.google.ca/webhp?um=1

所以我认为谷歌网址中的信息破坏了我所有的URL解析,我想我可能做错了什么或者有人有一个非常优雅的解决方案。我该怎么办?请帮帮我。


你为什么去掉了 &hl=en&safe=off 但没有去掉 um=1 - NullUserException
@NullUserException:我想这是因为URL中已经存在?,浏览器/服务器可能会将第二个视为“普通”字符。 - Crozin
5个回答

18

URL有一个特定的格式。那个在?之后、或者更确切地说,在?#之间(如果有的话),被称为查询字符串。它包含了一系列的键值对——变量名、=字符和相应的值。变量之间用&分隔:

key1=value1&key2=value2&key3=value3&key4=value4

你应该转义location.href,因为它可能包含一些特殊字符,如?&#

在JavaScript中转义字符串,请使用encodeURIComponent()函数,例如:

location.href = "http://tinyurl.com/create.php?url=" + encodeURIComponent(location.href)

它将替换像&这样的字符为%26。该字符序列不会被视为变量分隔符,因此它将作为变量的值附加。


谢谢,看起来很容易。那么在PHP中解码这个的正确方法是什么? - MikeD
1
你不需要自己处理。$_GET['url'] 将包含正确的值,例如 http://..../...html?abc=def&ghi=123。然而 PHP 像 JavaScript 一样提供了多个用于 URL 编码的函数:urlencode() - Crozin
1
@MikeD 我知道这有点老了,但我认为你应该接受这个答案 :) - AbdelHady

1
尝试一下
javascript:void(location.href='http://mywebsite.com/create.php?url='+encodeURIComponent(location.href));

0
javascript:void(location.href='http://mywebsite.com/create.php?url='+encodeURIComponent(location.href))

你需要转义这些字符。


0

所以你想要什么,只是没有查询字符串的url吗?

$url = explode('?',$_GET['url']);
$url = $url[0];

0

如何将URL传递到$_GET参数中:

http://yoursite.com/page.php?myurl=http://google.com/bla.php?sdsd=123&dsada=4323

那么你需要使用编码函数:

echo 'http://yoursite.com/page.php?url='.urlencode($mylink);

//so, your output (url parameter) will get like this
//http://yoursite.com/page.php?url=http%3A%2F%2Fgoogle.com%2Flink.php%3Fname%3Dsta%26car%3Dsaab

接下来,您需要使用以下代码对参数进行解码:

$variab = $_GET['url'];
$variab = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($variab)); 
$variab = html_entity_decode($variab,null,'UTF-8');
echo $variab;

通过这种方式,您可以将正确的链接作为参数传递。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接