我正在编写一个需要维护三个属性的JavaScript函数:
实际上,它通过将用户名和密码发送到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;
};
答案 0 :(得分:2)
encodeURIComponent,PHP会在填充$_POST
或$_GET
时自动对其进行解码
答案 1 :(得分:1)
我认为没有可逆散列函数这样的东西。但是,有很多javascript md5 libraries可用。
答案 2 :(得分:1)
'&password='+encode(inputs[1].value)
encode
函数来自哪里?在我看来,您的问题的快速答案是使用encodeURIComponent()
代替,自JavaScript 1.5起可用。另见Comparing escape(), encodeURI(), and encodeURIComponent();它也不会对所有内容进行编码,但会对所有服务器所期望的进行编码。
(对于跨域AJAX POST调用,我真的看看“带填充的JSON”。请参阅前面评论中提到的JSONP with jQuery。这也可以防止{{{ 1}}你随机选择了,jQuery也会帮助你,很多,摆脱timeout
之类的东西。而且,正如你apparently已经拥有的那样在服务器上的MD5哈希,我真的哈希密码客户端 - 查看Karl's answer - 并比较那些哈希值。尊重用户的密码和你自己的时间,放弃没有外部库要求!)