地址栏特殊字符参数转义

我是搬运工,参照文章:http://www.cnblogs.com/artwl/archive/2012/03/07/2382848.html

相关的转义功能如何实现可以参照上面的文章,这里我主要论述发现问题的过程。

根据测试的反馈,相关图片上传功能有时失败有时候成功。代码如下:

var url = location.href.substring(0, location.href.lastIndexOf("/"));
            var params = {
                uploadServerUrl: url.substring(0, url.lastIndexOf("/")) + "/blyj/TravelUpload.aspx?t>上传响应页面(必须设置)
                uploadBytesServerUrl: url.substring(0, url.lastIndexOf("/")) + "/blyj/TravelUpload.aspx?t> id,
                imageWidth: 1024,             //设置图片缩放宽度
                minFileSize: 400,             //最小图片大小KB
                imageQuality: 80,
                jsFunction: "upload",         //上传成功后回调JS
                filter: "*.jpg;*.png;*.bmp;*.jpeg",         //上传文件类型限制
                userId: '<%=userId %>',
                travelDate: '<%=travelDate %>'
            }
            //alert(params["uploadServerUrl"]);
            swfobject.embedSWF("../js/flashUpload/uploadImage.swf", "myContent", "100%", "500", "10.0.0", "../js/flashUpload/expressInstall.swf", params);

通过重现和查阅代码发现,失败的都是在url中带了日期参数,用fiddler拦截请求,发现传递的url变成了

POST /WebJourneyShow/blyj/TravelUploadImg.aspx?travelDate=2017/blyj/TravelUpload.aspx?tid=5036&userId=7&travelDate=2017/3/31%200:00:00&random=0.6985774147324264&gpsSuccess=false&dateTimeSucess=false&dateTime=null&editTimeSucess=true&editTime=2017-03-31%2014:42:27&lon=undefined&lat=undefined&fileName=2%E5%8F%96%E5%90%8D%E9%A1%B5.jpg HTTP/1.1

地址出错,导致响应界面无法做出正常处理。分析可知,如果上述代码中的location.href是:/WebJourneyShow/blyj/TravelUploadImg.aspx?travelDate=2017/3/31,通过substring(0, location.href.lastIndexOf("/"))就会截取为/WebJourneyShow/blyj/TravelUploadImg.aspx?travelDate=2017/3/而不是我们希望的/WebJourneyShow/blyj,加上 其他参数就会变成上面错误的url导致出错。

在这里,我做的处理仅仅时将date转义,也就是encodeURIComponent(date),将里面的/转义,就可以修复这个问题。