tvi*_*alw 5 javascript urlencode
我有一个Spring-MVC应用程序,Freemarker作为视图组件.
在我的模板中,生成了几个指向我的应用程序的链接,其中包含包含哈希键(#)的URL参数.
例:
参数: Q#106368 11
Freemarker使用编码的参数生成的URL: testurl.html?key=Q%23106368%2011
我使用JavaScript重定向到这个URL(原因:我使用JS来同时管理2帧的加载).
重定向方法很简单:
function redir(url) {
window.location.href = url;
}
Run Code Online (Sandbox Code Playgroud)
Freemarker生成的JS调用看起来像
<a href="javascript:redir('http://localhost:8080/testappp/testurl.html?key=Q%23106368%2011');">test</a>
Run Code Online (Sandbox Code Playgroud)
我的问题是浏览器/ Javascript转换回URL编码参数,认为有一个#并切断那里.
当我window.location.href='http://...'直接使用它的工作原理.只有在使用方法参数时,它似乎是神奇的URL解码,然后重定向失败,因为URL被切断了#.
有没有一种简单的方法来正确传输参数?
我知道我可以在模板中替换#例如with $$$hash$$$,并再次在服务器端进行替换.但是有很多地方我不得不改变......
tvi*_*alw 13
正如Marc B评论的那样,有必要再次进行URL编码.方法是encodeURI().但是,此方法不对#符号进行编码.对于我的特定用例,我必须在编码后替换#符号%23.
重定向JS方法最终看起来像:
function redir(url) {
url = encodeURI(url);
url = url.replace(/#/g, '%23');
window.location.href = url;
}
Run Code Online (Sandbox Code Playgroud)
比较escape(),encodeURI()和encodeURIComponent()
| 归档时间: |
|
| 查看次数: |
11256 次 |
| 最近记录: |