我在我的项目中使用angularJS。我的控制器中的一个功能是检查输入的电子邮件是否已存在于数据库中。如果存在,系统将通知用户它已被使用。为此,我必须将$http
与$params
一起使用。但是,即使输入的电子邮件已经存在,系统也不会给出反馈。所以我通过提醒$params
检查了检查的值是什么。
$scope.pop=function(email){
$params=$.param({
'email':email
})
alert($params)
}
我发现电子邮件中的@
字符变为%40
。例如:我输入 d_unknown@yahoo.com ,它变为 d_unknown%40yahoo.com 。
我试图通过以下方式检查原始数据:
$scope.pop=function(email){
alert(email)
}
它看起来很好,没有任何变化。 我该如何解决这个问题?
答案 0 :(得分:0)
将URL编码的电子邮件地址恢复为原始值是服务器的工作。所以你的JavaScript工作得很好,那里没什么可做的。您的服务器代码需要修复。
如果服务器上的应用程序在对数据库运行查询之前甚至没有解码参数,那么我觉得您可能还有一些安全问题需要解决。确保在SQL查询中使用参数之前对其进行解码和清理。您可以阅读有关清理参数和SQL注入的更多信息here。
答案 1 :(得分:0)
嗯,这不是一个真正的问题,你可以从RFC 2936看到第2.4节:
对于包含非ASCII字符的原始字符序列, 然而,情况更加困难。互联网协议 传输用于表示字符序列的八位字节序列 如果,期望提供一些识别所用字符集的方法 可能有多个[RFC2277]。但是,目前有 通用URI语法中没有任何条款可以实现此目的 鉴定。单个URI方案可能需要单个URI方案 charset,定义默认字符集,或提供指示方式 charset使用。
但是,如果您真的想这样做,可以使用方法decodeURIComponent()以解码此网址:
var email = "d_unknown%40yahoo.com";
console.log(decodeURIComponent(email));
答案 2 :(得分:-1)
这是因为所有特殊字符都被编码。
但是你可以在使用decodeURIComponent()
之前对字符串进行解码(在js中,但有php和其他所有函数)