我加载了一个JavaScript文件,该文件将当前页面的URL作为参数。这是我使用的代码:
document.write(unescape('%3Cscript src=\"' + _vis_opt_protocol + 'domain.com/js.php&a='+account_id+'&url='+encodeURIComponent(document.URL)+'&random='+Math.random()+'\" type=\"text/javascript\"%3E%3C/script%3E'));
我认为encodeURIComponent将完成正确编码URL的工作。但是,在加载JS文件时,浏览器也会解释编码的URL。例如,如果document.URL是http://example.com/?test=1#nono,那么浏览器会将test解释为JS的另一个参数,并且在#uno之后不会发送任何内容,因为它认为它是一个锚点。
对URL进行编码以便将其原样传递给服务器的最佳方法是什么?我也玩弄了base64或其他形式的编码。
答案 0 :(得分:2)
问题是你调用的unescape
函数是encodeURIComponent
的工作。你可以试试这个:
document.write('<script type="text/javascript" src="' + _vis_opt_protocol + 'domain.com/js.php&a=' + account_id + '&url=' + encodeURIComponent(document.URL) + '&random=' + Math.random() + '"><\/sc' + 'ript>');