如何在URL参数中提交哈希键?
How can I submit a hash key in an URL parameter?
我有一个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;
}
Freemarker生成的JS调用看起来像
<a href="javascript:redir('http://localhost:8080/testappp/testurl.html?key=Q%23106368%2011');">test</a>
我的问题是,浏览器/Javascript转换回URL编码参数,认为有一个#
和切断那里。
当我使用window.location.href='http://...'
直接工作。只有当使用方法参数时,它似乎被神奇地URL解码,然后重定向失败,因为URL在#
处被切断。
是否有一种简单的方法来正确传输参数?
我知道我可以在模板中替换#
,例如使用$$$hash$$$
,并再次在服务器端进行替换。但是有很多地方需要修改
如Marc B所述,需要重新进行URL编码。方法是encodeURI()
。但是,此方法不编码#
符号。对于我的特定用例,我必须将编码后的#
符号替换为%23
。
重定向JS方法最终看起来像:
function redir(url) {
url = encodeURI(url);
url = url.replace(/#/g, '%23');
window.location.href = url;
}
比较escape()、encodeURI()和encodeuriccomponent ()
encodeuriccomponent/decodeuriccomponent比encodeURI更彻底,它将解码/编码'#'和事件'/'
您使用的是什么浏览器?我正在尝试FireFox 5,在我的测试中它不能将%23
转换回#
。当你把鼠标移到链接上或复制链接位置时,它有什么?你确定输出链接的东西没有进行转换吗?
这是不理想的,但它似乎解决了问题:
<a onclick="url = 'http://localhost:8080/testappp/testurl.html?key=Q%23106368%2011';" href="javascript:redir(url);">test</a>
似乎href
属性被解码了。当我把鼠标移到它上面时,我看到的是#
而不是%23
。
- 在Javascript中,如何使用对象作为哈希映射的键
- 在IE9中提交表单之前对密码进行哈希处理
- 按值对映射/哈希进行排序,保留键
- 我可以比较两个Perl哈希(键和值)提取差异并应用于JavaScript中的哈希吗?
- 为什么我的 JavaScript 哈希带有保留字“toString”作为显示 NaN 的键
- 如何使用 Node.JS 在哈希表中为每个键存储多个值
- 从作为哈希映射中的键的对象中检索值
- 哈希键/值作为数组
- 在提交表单之前对客户端进行哈希密码哈希处理的简单方法
- 带有键/值的Javascript测试哈希表
- 将动态键、值对添加到JavaScript数组或哈希表中
- 如何在Javascript中初始化带有整数键的静态值哈希映射
- 如何实现哈希键导航
- 使用对象的属性作为键将对象添加到哈希/数组
- 如何将新元素附加到哈希中的同一个键
- 在javascript / backbone中添加哈希键
- Coffeescript动态哈希键
- 如何在URL参数中提交哈希键?
- 如果希望使用javascript数组作为哈希键,请使用任意数组元素进行检索
- 查询dynamoDB的关键条件'GE'在哈希键上