我在查询字符串值中有一个与此类似的URL:
example.com/?p1=a1&p2=a2
我的网站上有一个查询,它会获取URL并重定向到某个页面。像这样:
mysite.com/?url=example.com/?p1=a1&p2=a2
但是查询字符串被误解了。如何将值URL中的查询字符串与实际URL分开?我已经尝试编码问号和&符号,但页面缺少值URL中的内容。
修改 这就是我通过javascript获取网址的方式:
function nameps(url) {
url = url.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regexS = "[\\?&]" + url + "=([^&#]*)";
var regex = new RegExp(regexS);
var results = regex.exec(window.location.href);
if (results == null) return "";
else {
return results[1];
}
}
答案 0 :(得分:1)
如何将url
值传递给javascript?这是您应该对整个网址进行网址编码的地方,以制作
example.com/?p1=a1&p2=a2
以
的形式输入您网站的javascriptexample.com%2F%3Fp1%3Da1%26p2%3Da2
您需要在javascript中调整正则表达式以处理格式的这种更改,或者使用javascript url解码函数,例如decodeuri
。
,例如在您的网站上:
function nameps(url) {
url = decodeURI(url); ///new line decodes the previously encoded URL
url = url.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regexS = "[\\?&]" + url + "=([^&#]*)";
var regex = new RegExp(regexS);
var results = regex.exec(window.location.href);
if (results == null) return "";
else {
return results[1];
}
}
这也会涉及您将url
值传递给上面的函数,但必须包含以下行:
url = encodeURI(url);
为了正确编码和格式化给定的地址。
答案 1 :(得分:-1)
我不会尝试使查询字符串过于复杂。而不是:
mysite.com/?url=example.com/?p1=a1&p2=a2
我会这样做:
mysite.com/?url=example.com&p1=a1&p2=a2
然后我会解析它并从组件重建辅助URL。
尝试在查询字符串中打包查询字符串是一件麻烦事。我不会浪费任何时间试图让它以这种方式工作。