无法读取查询字符串中的查询字符串?

时间:2015-08-20 22:56:58

标签: javascript url query-string

我在查询字符串值中有一个与此类似的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];
                            }
                        }

2 个答案:

答案 0 :(得分:1)

如何将url值传递给javascript?这是您应该对整个网址进行网址编码的地方,以制作

example.com/?p1=a1&p2=a2 

的形式输入您网站的javascript
example.com%2F%3Fp1%3Da1%26p2%3Da2

您需要在javascript中调整正则表达式以处理格式的这种更改,或者使用javascript url解码函数,例如decodeuri

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。

尝试在查询字符串中打包查询字符串是一件麻烦事。我不会浪费任何时间试图让它以这种方式工作。