如何在接受PHP中的位置地址时只接受某些特殊字符



我想接受一个地方的地址并将其输入到我的数据库中。如果我将地址作为参数发送到以下函数,它将删除所有的起始和结束空格以及所有特殊字符

public function sanitizeString($string){
$sanitized_string = htmlentities(mysqli_real_escape_string($this->conn, trim($string)));
return $sanitized_string;
}

但正如我们在这样的地址中所知

1/A大干道,加尔各答-31

有一些特殊字符,如'/'、'-'、'、',必须加以说明。

我基本上想把某些地方的地址存储在我的数据库中,并使用谷歌地图地理编码API将它们转换为纬度和经度,并使用标记在谷歌地图上进行标记。

有人能给我建议一种方法来消毒地址,保持某些特殊字符的完整性,或者其他存储地址的方法吗?

编辑

对于那些提问的人,我在处理数据库查询时确实使用了PDO准备的语句。下面是一个实例

public function getUserByEmailAndPassword($email, $password){
$stmt= $this->conn->prepare("select * from users where email= ? and status=1");
$stmt->bind_param("s", $email);
if($stmt->execute()){
$user= $stmt->get_result()->fetch_assoc();
$stmt->close();
return $user;
}
else{
return NULL;
}
}

但在我将$email作为参数传递之前,我会使用mysqli_real_escape_string对其进行清理,这可能不需要我做,因为prepare和bind_param会处理sql注入。

一般来说,在使用PDO时,在将插入数据库时,不会尝试清除这些值。我们准备了语句和参数绑定选项,以防止sql注入

现在,当您实际使用存储在数据库中的信息(其中可能包含恶意代码)时,在回显任何内容时,总是使用函数htmlspecialchars()。例如:

//if you obtained the info from your database as follows:
$row = $stmt->fetch();
//then you can output it as follows:
echo htmlspecialchars($row['address']);

并且您的代码将受到sql注入(如果您在最初将信息插入数据库时使用了准备好的语句和绑定参数)和函数htmlspecialchars()的XSS的保护

最新更新