以下网址可以正常使用:
但是,如果我想在`param中添加一些特殊字符?,/,\,则URL变为:
或
http://localhost/mysite/mypage?param=http://www.mysite.com/page2?a= \和b = ...
哪个不行。我该如何解决这个问题?
答案 0 :(得分:22)
您必须在网址中对特殊字符进行编码。请参阅:http://www.w3schools.com/tags/ref_urlencode.asp
答案 1 :(得分:7)
您需要对查询参数进行编码,然后再将它们组合成一个url。这里需要的功能是encodeURIComponent。例如,
您需要创建的网址是:
http://localhost/mysite/mypage?param=a=?&b=/
现在,假设?和/作为变量,你需要在放入url之前对它们进行编码。 所以让我们使用这个函数创建你的url(我期待两个查询参数):
var q1 = "a=?"; //came from some input or something
var q2 = "/"; //came from somewhere else
var faultyUrl = "http://localhost/mysite/mypage?param="+ q1 +"&b=" + q2;
// "http://localhost/mysite/mypage?param=a=?&b=/"
var properUrl = "http://localhost/mysite/mypage?param="+ encodeURIComponent(q1) +"&b=" + encodeURIComponent(q2);
//"http://localhost/mysite/mypage?param=a%3D%3F&b=%2F"
此功能在基本JS中,并在所有浏览器中都受支持。
答案 2 :(得分:3)
在JavaScript中,您可以使用 encodeURI()功能。
ASP具有 Server.URLEncode()功能。
.NET中的HttpServerUtility.UrlEncode
答案 3 :(得分:2)
使用javascript:
以特殊字符传递QueryString值的简便方法var newURL=encodeURIComponent(uri);
window.location="/abc/abc?q="+newURL;
答案 4 :(得分:1)
您需要使用编码特殊字符,请参阅this页面以供参考。
如果您使用的是PHP,则可以使用名为urlencode()的函数。
答案 5 :(得分:0)
您需要使用URL实体替换字符。 Some information here.
答案 6 :(得分:0)
我在下面做了,工作正常。
const myQueryParamValue = "You&Me";
const ajaxUrl = "www.example.com/api?searchText="+encodeURIComponent(myQueryParamValue)