PHP / mySQL - 如何在插入数据库之前安全地编码/解码/转义/任何需要的字符串

时间:2014-01-09 00:20:40

标签: php mysql

我的问题是:我有一个数据库,其中所有字段都是VARCHAR。有些代表html代码。此代码包含字符,如◉,⬛︎,◔,➜,★,✦等。这些字符不在HTML上编码。他们就像你在这里看到他们一样。

该数据库上的其他字段是URL。

我知道我必须逃避这些字符以防止sql注入,并且还必须对它们进行编码以允许在数据库上插入。

htmlspecialchars将不会处理这些符号,因为它们未在源上进行编码。 mysql_escape_string只会逃避句号和双引号等。

我如何真正对此进行编码并在PHP中进行转义,以便我可以在数据库中插入这些数据以及如何阅读它们?

感谢。

3 个答案:

答案 0 :(得分:2)

当我将德语字符串值插入varchar类型字段时,我发现了同样的问题,字符串被转换为不可读的字符。

这是UTF-8的问题,我通过以下方式解决了这个问题:

$con = mysqli_connect("localhost","root","root");
mysqli_query($con,"SET NAMES 'utf8'");

我希望它能解决您在数据库的每个字段中的问题。

答案 1 :(得分:1)

使用parameterized queries阻止SQL注射。在html中显示数据时使用htmlspecialchars()函数。有了我喜欢的PDO:

$db = new PDO($dsn, $db_user, $db_password);
$query = 'INSERT INTO table (data1, data2) VALUES (:data1, :data2)';
$statement = $db->prepare($query);                          
$statement->bindValue(':data1',$data1);
$statement->bindValue(':data2',$data2)
$statement->execute();

答案 2 :(得分:-3)

如果您尝试删除常规a-z字母旁边的所有字符,并使用preg_match删除0-9个数字:

preg_match("/^[a-zA-Z0-9]+$/", $value);