在 url 的请求参数中传递“#”哈希符号在 Firefox 中不起作用

Posted

技术标签:

【中文标题】在 url 的请求参数中传递“#”哈希符号在 Firefox 中不起作用【英文标题】:Passing "#" hash symbol in request parameter of url not working in Firefox 【发布时间】:2012-10-25 02:17:46 【问题描述】:

我正在使用 AJAX 执行 struts 操作,一切正常,但 Firefox 出现问题,当我将 URL 中的参数作为请求参数传递时,如果该参数最后包含哈希(#)符号,那么firefox 会删除该符号之后的所有内容,并在没有它的情况下将该参数发送到操作。

例如,如果我在 Firefox 中通过了 test123#abcd,那么我在操作类中只得到 test123,而不是 test123#abcd,这对我的要求来说是不可取的。对于 IE,它工作得很好。有什么办法可以我可以提取完整的参数,包括 Firefox 中的 # 符号。

如果我还需要发布 java 操作代码,请告诉我,谢谢。

JS sn-p

var valuePassword=test123#abcd;

    var url = "/test/ChangePwdAjax.do?newPass="+valuePassword;
            var xmlHTTP = getXMLHTTPRequest();

【问题讨论】:

【参考方案1】:

使用

var url = "/test/ChangePwdAjax.do?newPass="+ encodeURIComponent(valuePassword);

这会将您的 valuePassword 编码为一个有效的 URL 组件,该组件可以作为 URL 中的查询字符串传递

另一方面,您应该使用decodeURIComponent 从编码字符串中获取值

var value = decodeURIComponent(valuePasswordPassed);

想知道更多关于这个Go here

【讨论】:

原因是您必须对数据进行编码。哈希 (#) 在这里无效,哈希和后面的所有内容都不应离开您的浏览器 我个人会链接到 this documentation 而不是 w3schools(它倾向于生成低于标准的文档)。 谢谢大家,它有效,早些时候我受到我的思维过程的限制,因为在 IE 中它工作正常。我也想知道为什么两个浏览器的行为不同,我同意 URL 查询字符串必须是编码。谢谢【参考方案2】:

当您更改数据时,您必须执行 http POST 请求。不是 GET 请求。这将自动解决您的问题,而无需对您的密码进行编码。

xmlhttp.open("POST", "/test/ChangePwdAjax.do", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("newPass=" + valuePassword);

【讨论】:

我尝试通过更改 xmlHTTP.open("GET",url,true);到 xmlHTTP.open("POST",url,true);但它是一样的。不确定我是否做得正确。但编码解决了我的目的。谢谢。 @user1697113 值不应在 url 中,而应在正文中。我会更新我的答案。

以上是关于在 url 的请求参数中传递“#”哈希符号在 Firefox 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

http get请求时参数被转码的问题

http、https请求URL中带有&等特殊字符的解决方法

为啥关键字参数必须作为带有符号键的哈希传递,而不是 Ruby 中的字符串键?

URL请求中文符号“乱码”(解码转码)解决方式

SpringBoot入坑-请求参数传递

url 传递参数(特殊字符)解决方法