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

时间:2010-08-22 04:39:44

标签: javascript 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']; 

检索它。问题是,如果我在网址上已经有一些获取样式信息的网址,它就会混淆所有内容。

示例,如果我在:

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

'_GET'代码将$ url设置为

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

所以我认为谷歌网址中的信息搞乱了我的所有网址解析,我想我做的事情非常不正确,或者有人为此提供了非常优雅的解决方案。我该怎么办?请帮忙

5 个答案:

答案 0 :(得分:15)

URL具有指定的格式。 ?之后的那个部分,或者更确切地说,?#之间的部分(如果存在)称为query string。它包含一个键值对列表 - 变量名,=字符和值。变量由&分隔:

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

您应该转义location.href,因为可以包含一些特殊字符,例如?&#

要在JavaScript中转义字符串,请使用encodeURIComponent()函数,如下所示:

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

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

答案 1 :(得分:1)

尝试

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

答案 2 :(得分:0)

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

你需要逃避角色。

答案 3 :(得分:0)

那么你想要什么,只是没有查询字符串的网址?

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

答案 4 :(得分:0)

要在$ _GET参数中传递url,如下所示:

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;

这样,您可以将正确的链接作为参数传递。

相关问题