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

Mik*_*keD 11 javascript url

我正在尝试制作一个使用用户当前URL的书签,有点像使用此JavaScript代码的tinyURL书签

javascript:void(location.href='http://tinyurl.com/create.php?url='+location.href)
Run Code Online (Sandbox Code Playgroud)

所以我复制了同样的东西并制作了

javascript:void(location.href='http://mywebsite.com/create.php?url='+location.href)
Run Code Online (Sandbox Code Playgroud)

然后我用:

$url=$_GET['url']; 
Run Code Online (Sandbox Code Playgroud)

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

例如,如果我在:

http://www.google.ca/webhp?um=1&hl=en&safe=off
Run Code Online (Sandbox Code Playgroud)

'_GET'代码将$ url设置为

http://www.google.ca/webhp?um=1
Run Code Online (Sandbox Code Playgroud)

所以我觉得在谷歌URL的信息被搞乱了我所有的URL解析的,我想我做的东西非常不正确或有人为这是一个非常优雅的解决方案.我该怎么办?请帮忙

Cro*_*zin 15

URL具有指定的格式.该部分之后?,或者更确切地说?,#如果存在,则称为查询字符串.它包含一个键值对列表 - 变量名称,=字符和值.变量分隔为&:

key1=value1&key2=value2&key3=value3&key4=value4
Run Code Online (Sandbox Code Playgroud)

你应该逃避,location.href因为它可以包含一些特殊字符,如?,&#.

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

location.href = "http://tinyurl.com/create.php?url=" + encodeURIComponent(location.href)
Run Code Online (Sandbox Code Playgroud)

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


Ale*_*rge 0

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

你需要逃离角色。