Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript将编码参数附加到url?_Javascript_Parameters_Url Encoding - Fatal编程技术网

如何使用javascript将编码参数附加到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+

我有一个搜索输入框,将其数据附加到“#”后面的URL中,例如
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/,“+”);