Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.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 GET参数_Javascript_Hash - Fatal编程技术网

在JavaScript中将用户输入编码为URL GET参数

在JavaScript中将用户输入编码为URL GET参数,javascript,hash,Javascript,Hash,我正在编写一个JavaScript函数,它需要维护三个属性: 非常小和轻量级-无需外部库 以能够作为GET参数传递的方式对字符串进行编码 此字符串必须在其目标处再次解码 有效地,它通过将用户的用户名和密码发送到PHP页面来验证用户,然后由PHP页面进行验证。这是通过GET完成的,因为我还没有找到一种方法来执行后台跨域POST请求。问题在于,如果用户的密码中有“#”或类似字符,则无法正确发送 目前为了避免这种情况,我在发送密码字符串之前先对其进行encode()编码,这样可以毫无问题地接收密码

我正在编写一个JavaScript函数,它需要维护三个属性:

  • 非常小和轻量级-无需外部库
  • 以能够作为GET参数传递的方式对字符串进行编码
  • 此字符串必须在其目标处再次解码
有效地,它通过将用户的用户名和密码发送到PHP页面来验证用户,然后由PHP页面进行验证。这是通过GET完成的,因为我还没有找到一种方法来执行后台跨域POST请求。问题在于,如果用户的密码中有“#”或类似字符,则无法正确发送

目前为了避免这种情况,我在发送密码字符串之前先对其进行
encode()
编码,这样可以毫无问题地接收密码字符串。然而,我读到PHP的
urldecode()
并不是一个完美的类比,因为有一些角落的情况被不同地处理(例如,“,”+”,等等)。遗憾的是,我再也找不到这个文档了,所以我无法引用它,但要点是其中一个将空格转换为“+”符号,另一个将其视为实际的加号,或者类似的东西

因此,我正在寻找一个Javascript函数,它可以接受字符串并使其URL安全,并且在PHP中有一个完美的反转函数,以便可以恢复原始字符串

我目前用来实现这一目标的代码可能很糟糕:

login.onsubmit = function(){
    loginFailMsg.style.display = 'none';
    var inputs = login.getElementsByTagName('input');
    var formdata = 
        'username='+inputs[0].value+'&password='+encode(inputs[1].value);
    submit.src = formtarget+'/auth/bklt?'+formdata;
    userinfo = undefined;
    setTimeout(getUserinfo,300);
    return false;
};

我不认为有可逆散列函数这样的东西。但是,有很多可用的函数。

我认为没有可逆哈希函数这样的东西。然而,有很多可用的方法

encode
函数来自哪里?在我看来,您的问题的快速答案是使用JavaScript 1.5。另见;它也不会对所有内容进行编码,但会对服务器期望的所有内容进行编码

(至于跨域AJAX POST调用,我真的想看看“带填充的JSON”。请参阅我在前面的评论中提到的内容。这还可以防止您随机选择的
超时问题,jQuery还可以帮助您摆脱
输入[0].value
等等。而且,由于服务器上已经有了MD5散列,我也会对密码客户端进行散列--请参阅--并比较这些散列。请尊重用户的密码和您自己的时间,不要再要求外部库了!)

encode
函数来自哪里?在我看来,您的问题的快速答案是使用JavaScript 1.5。另见;它也不会对所有内容进行编码,但会对服务器期望的所有内容进行编码


(至于跨域AJAX POST调用,我真的想看看“带填充的JSON”。请参阅我在前面的评论中提到的内容。这还可以防止您随机选择的
超时问题,jQuery还可以帮助您摆脱
输入[0].value
等。而且,由于服务器上已经有了MD5散列,因此我也会对密码客户端进行散列--请参阅--并比较这些散列。尊重用户的密码和您自己的时间,放弃无外部库要求!)

,PHP将在填充
$\u POST
$\u GET
时自动解码,PHP将在填充
$\u POST
$\u GET

时自动解码既然您提到了GET的一个很好的理由,为什么不删除这句话并与我们分享这个理由呢?好奇!而且,你的问题太吵了!如果你不想要MD5(就像你对Karl的回答所评论的那样),那么为什么要提到它,为什么不从标题中删除整个散列呢?@Arjan:为这噪音道歉,我自己也不太擅长措辞=P如果我可以使用MD5,我会喜欢它,但我真正需要的是javascript中内置的东西。(嗯,JavaScript是一种编程语言,你如何在不自己编写代码的情况下使用内置的东西;-)至于背景文章:你看了吗?)我用一种希望不那么嘈杂和清晰的方式重写了这个问题,既然你提到了GET有一个很好的理由,为什么不删除这句话,并简单地与我们分享这个原因?好奇!而且,你的问题太吵了!如果你不想要MD5(就像你对Karl的回答所评论的那样),那么为什么要提到它,为什么不从标题中删除整个散列呢?@Arjan:为这噪音道歉,我自己也不太擅长措辞=P如果我可以使用MD5,我会喜欢它,但我真正需要的是javascript中内置的东西。(嗯,JavaScript是一种编程语言,你如何使用内置的东西而不用自己编写代码;-)至于背景文章:你看了吗?)我用一种希望不那么嘈杂和清晰的方式重写了这个问题抱歉,我说错了-在没有md5的情况下,我在寻找某种翻译,比如base64或其他什么。。。基本上,这将确保它被传递到脚本正确道歉,我说错了-在没有md5的情况下,我正在寻找某种翻译,即base64或其他。。。基本上可以确保它正确地传递给脚本使用escape,#不是问题。。。只是php的urldecode没有生成准确的输入。这里有一些涉及到“”、“+”和其他一些字符的小例子(我希望我能记得我在哪里读过这篇文章),我想,因为你没有使用
?现代浏览器也支持
encodeURI
等,但我想
escape
确实应该会给你与普通
相同的结果。哦,对不起。我正在尝试完成一个跨域ajax请求,因为这是禁止的,所以我能想到的最好的解决方案是尝试预加载一个url为“”的“图像”。jQuery的问题是它是一个外部库,而且
'&password='+encode(inputs[1].value)