代码之家  ›  专栏  ›  技术社区  ›  Mala

在javascript中将用户输入编码为url get参数

  •  0
  • Mala  · 技术社区  · 14 年前

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

    • 非常小和轻-没有外部库
    • 以能够作为get参数传递的方式对字符串进行编码
    • 此字符串必须在其目标处再次解码

    实际上,它通过将用户名和密码发送到一个PHP页面来对用户进行身份验证,然后对其进行验证。这是通过 得到 因为我还没有找到一种方法来做一个跨域的后台发帖请求。问题是,如果用户的密码中包含类似于“”的字符,则无法正确发送。

    为了避免这种情况,我 encode() 发送前的密码字符串,它允许无问题地接收密码字符串。但是,我读到了 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;
    };
    
    3 回复  |  直到 14 年前
        1
  •  1
  •   Community Egal    7 年前
    '&password='+encode(inputs[1].value)
    

    何处 encode 功能来自?在我看来,你问题的快速答案是用 encodeURIComponent() 相反,从javascript 1.5开始就可以使用。也见 Comparing escape(), encodeURI(), and encodeURIComponent() 它也不编码任何东西,但是 对服务器期望的所有内容进行编码。

    (至于跨域Ajax Post调用,我真的会看一下“带填充的JSON”。见 JSONP with jQuery 我在前面的评论中提到的。这也将防止 timeout 您已经随机选择了,jquery也将帮助您, 很多 摆脱 inputs[0].value 诸如此类。而且,和你一样 apparently 服务器上已经有了MD5散列,我还真的要散列密码客户端——请参见 Karl's answer --然后比较这些哈希值。尊重你的用户密码和你自己的时间,放下它 没有外部库 要求!)

        2
  •  2
  •   Quentin    14 年前

    encodeURIComponent ,PHP将在填充时自动解码它。 $_POST $_GET

        3
  •  1
  •   Karl Bielefeldt    14 年前

    我不认为有可逆散列函数这样的东西。有很多 javascript md5 libraries 但也有。