我将一个url存储为无线电输入元素中的值。当用户选择其中一个元素时,它会运行一个函数将它们发送到给定的URL。代码读取元素值属性,然后在将其分配给window.location.href之前在其上运行encodeURI
的Javascript
function go(e){
window.location.href=encodeURI(e.value);
}
HTML
<input type="radio" onclick="go(this)" name="first" value="https://site.othersite.com/login.aspx?client=cname<=P" >
这在Chrome和Firefox中正常运行,但不适用于IE。在IE中发生的事情很奇怪。首先,浏览器首先将属性中的&amp; LT解释为小于符号。这个它的自我并不太奇怪,因为这是一个小于符号的转义字符串。奇怪的是,如果将其转义为
https://site.othersite.com/login.aspx?client=cname&LT=P
然后在页面打印或提醒时正确显示。但是当它传递给window.location.href时,它再次将&amp; LT解释为小于符号。
如果您将属性中的字符串转义为
https://site.othersite.com/login.aspx?client=cname&amp;LT=P
然后它似乎在IE中正常工作但是这会在其他浏览器中产生不正确的结果。
所有IE测试均在IE 9上完成
知道处理这件事的正确方法是什么?
答案 0 :(得分:0)
尝试将您的值设置为您传递的参数
<input type="radio" onclick="go(this)" name="first" value="client=cname&LT=P" >
然后将其作为encodedURIcomponent()附加到您的网址
window.location.href="https://site.othersite.com/login.aspx?" + encodeURIComponent(e.value);
输出:
https://site.othersite.com/login.aspx?client%3Dcname%26LT%3DP
答案 1 :(得分:0)
你不应该使用encodeURI
您的代码应该是:
function go(elem){
window.location.href = elem.value;
}
如果你只是为查询字符串添加一个值,那么你需要使用它。
function go(elem){
window.location.href = "http://www.example.com/foo/?redirect=" + encodeURIComponent(elem.value);
}