如何使用javascript将编码参数附加到url?
我有一个搜索输入框,将其数据附加到“#”后面的URL中,例如如何使用javascript将编码参数附加到url?,javascript,parameters,url-encoding,Javascript,Parameters,Url Encoding,我有一个搜索输入框,将其数据附加到“#”后面的URL中,例如http://test.cl.com/#pqr xyz(使用哈希避免重新加载页面)。它工作正常,但我的数据没有被编码,因为空格没有被+或%20替换,所以在附加之前,我使用encodeURI函数,然后将该值附加到URL,但地址栏中仍然有空格字符。分配之前,我已检查是否添加了正确的值(通过发出警报prq%20xyz) 当前输出:http://test.cl.com/#pqr xyz 所需输出:http://test.cl.com/#pqr+
http://test.cl.com/#pqr xyz
(使用哈希避免重新加载页面)。它工作正常,但我的数据没有被编码,因为空格没有被+
或%20
替换,所以在附加之前,我使用encodeURI
函数,然后将该值附加到URL,但地址栏中仍然有空格字符。分配之前,我已检查是否添加了正确的值(通过发出警报prq%20xyz
)
当前输出:http://test.cl.com/#pqr xyz
所需输出:http://test.cl.com/#pqr+xyz
请帮我找出问题的原因。谢谢
<html>
<head>
<title>Test</title>
<script type="text/javascript" src="jquery1.6.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#btn').click(function(){
var url = encodeURI("pqr xyz");
alert(url); // shows encoded value
window.location.hash = (url);
});
});
</script>
</head>
<body>
<h3>sample app</h3>
<button id="btn">
append
</button>
</body>
试验
$(文档).ready(函数(){
$('#btn')。单击(函数(){
var url=encodeURI(“pqr xyz”);
警报(url);//显示编码值
window.location.hash=(url);
});
});
示例应用程序
追加
地址栏显示未编码字符并不意味着数据编码不正确。例如,Firefox可以并且将尝试解码url地址中的字符,以使其更具可读性(我猜) 即使手动输入一些编码字符,例如导航到:
http://google.com?opt=test%20me%20or%20not
地址栏中可见的url将被“解码”-您将看不到%20
编辑:
要获取加号而不是%20,可以在使用encodeURI之前手动替换空格:
var url = encodeURI("pqr xyz".replace(/\s/, '+'));
看看下面的帖子。它有一个测试表单,您可以在其中看到每个Javascript编码函数的输出: 关于这些技术也有很好的讨论 干杯
我想你应该在Firefox上运行测试。Firefox的现代版本不将哈希url中的空格字符编码为
%20
或+
您只需在任何url中添加一个带空格的哈希,就可以进行简单的测试
其他浏览器会自动将空间转换为%20
,但现代Firefox不会。它没有任何问题,也不应该在你的应用程序中产生任何问题
如果使用decodeURI
或decodeURIComponent
对哈希进行解码,则空格将被正确解码,因此应用程序的行为方式与%20
相同
最坏的情况是
+
字符,该字符未被解码URI
解码回空格 只是一个附加注释:您不需要向字符串或对象发出警报来确认这些内容或状态。您可以使用console.log(url);它会出现在谷歌chrome和firefox的控制台上(对IE不太清楚)?在浏览器中,是否用“+”或“%20”替换地址栏中的空格?你真的很重要?有什么区别吗?就gmail而言,它工作正常。e、 g假设您搜索了“pqr xyz”,那么在url中会附加“pqr+xyz”(Firefox)。但这是浏览器地址栏中可见内容的问题,还是访问/操作该数据时遇到一些问题?例如,谢谢。我同意%20将不可见。那么,在添加编码参数后,如何实现pqr+xyz格式(与gmail搜索或stackoverflow搜索相同)。在我的例子中,url空间将出现,这是一个有效的url(不允许使用空格),如果你坚持使用+字符而不是%20,你可以做一些简单的事情:var url=encodeURI(“pqr xyz”.replace(/\s/,“+”);