【发布时间】:2009-10-30 15:58:25
【问题描述】:
我们在 Web 应用程序中有一个菜单,它使用 <a> 标记在主框架中加载页面。
菜单中的典型项目类似于:
<a target="mainframe" href="/servlet1?param1=val1&parma2=servlet2?s2p1=val2%26s2p2=val3¶m3=val4">Menu Item 1</a>
我们需要在请求链接之前添加一些 JavaScript 验证,所以我将其更改为:
<a target="mainframe" href="javascript:validate('/servlet1?param1=val1&parma2=servlet2?s2p1=val2%26s2p2=val3¶m3=val4')">Menu Item 1</a>
(我知道链接中的javascript:function 是不好的做法,但我们使用第 3 方库来生成菜单,所以我无法更改这部分代码)
Servlet1 期望:
参数 1='val1'
param2='servlet2?s2p1=val2%26s2p2=val3'
param3='val4'
Servlet1 然后转发到 param2 的值,因此 Servlet2 期望:
s2p1='val2'
s2p2='val3'
但是,当我在验证函数中添加 alert 以检查传入的内容时:
function validate(href) {
alert(href);
...validation code...
}
它正在给予:
/servlet1?param1=val1&parma2=servlet2?s2p1=val2**&**s2p2=val3¶m3=val4(注意上面函数调用中的粗体&是%26)
%26 在被传递到 JS 函数时被转换为 &,这在请求被转发到 Servlet2 之前通常不会发生。因为%26 已经更改为&,所以s2p2 请求参数被servlet1 拾取而不是servlet2。
基本上我的问题是,如果您执行 onClick="validate('/servlet1?param1=val1&parma2=servlet2?s2p1=val2%26s2p2=val3&param3=val4')"
如您所愿,它保持为%26?
【问题讨论】:
-
不应该有两个“?”在网址中
-
第二个“?”只是 param2 的一部分,其值为
servlet2?s2p1=val2%26s2p2=val3
标签: javascript html