我正在尝试制作一个使用用户当前网址的书签,有点像使用此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
所以我认为谷歌网址中的信息搞乱了我的所有网址解析,我想我做的事情非常不正确,或者有人为此提供了非常优雅的解决方案。我该怎么办?请帮忙
答案 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;
这样,您可以将正确的链接作为参数传递。