在请求的地址中出现了#,但是#在struts中是地址请求时候的特殊字符,怎样能让它转换为正常使用的字符呢?
例如:url=http://127.0.0.1:8080/ReqHGPS?MapType=0&HInfo=1217028#1217717#1217820#1218514#1217714#1217023&CID=1217028;当我请求这个地址的时候,IE会自动在#处给我自动截断,后面的就没法正常执行了。该如何解决呢。
#是不能换成其他的字符的。

解决方案 »

  1.   

    浏览器编码处理,server 再解码document.write(encodeURIComponent("#")); // %23
      

  2.   

    我的“#”是在java代码中使用的,如何转换啊,我在js中把整个地址都转换了,但是出现了不能提交的错误,还有没有其他的方法啊
      

  3.   

    用%23来替换HInfo中的所有#后再传参。不行的话,就用|来代替#,在后台里也只要换用|来split就是了。
      

  4.   


    在java端替换下
    String url='http://127.0.0.1:8080/ReqHGPS?MapType=0&HInfo=1217028#1217717#1217820#1218514#1217714#1217023&CID=1217028';
    url.replaceAll("#", "!");
    这样试试看或是用URLEncoder.encode转换下也行
      

  5.   

    谢谢你们,你们说的方法我都试过了,不能成功。我发送这个地址到另一个系统中,另一个系统也就是服务器接受的系统是不能有任何的改变的,能改的只能在我这边改。
    我这个返回的结果是一个图片。我查询到这个可以通过ajax发送,然后返回的是一些二进制流,用xmlhttp.responseBody接收,然后保存到一个路径下,在本地调用就行了。
    谁知道xmlhttp.responseBody的用法,以及返回的数据流怎么能保存能文件呢?
      

  6.   


    xmlhttp.onreadystatechange=function(){
    if(xmlhttp.readyState==4 && xmlhttp.status==200){    
    headers=xmlhttp.getAllResponseHeaders();
            with(new ActiveXObject("MSXML2.DOMDocument").createElement("node")){
             dataType = "bin.base64";
             nodeTypedValue = xmlhttp.responseBody;  
             src="data:"+headers.match(/Content-Type:\s*([^\s]+)/)[1]+";base64,"+text;
    //得到的src中是二进制数据流,下面的语句是直接赋值给一个div的背景,但是当src数据流的长度很大的时候就出现了错误,不能正确赋值呢
                      document.getElementById("mapDiv").style.backgroundImage = "url("+src+")";
    document.getElementById("load").style.display = "none";
    }
    }
    }
    xmlhttp.open("post",url);
    xmlhttp.send();
      

  7.   

    new ActiveXObject("ADODB.Stream")能接收到ajax传递的二进制数据流,但是IE浏览器好像对它有限制,是一个不安全的因素,不能正确执行,有知道能说一下吗?