我的问题是:我有一个数据库,其中所有字段都是VARCHAR。有些代表html代码。此代码包含字符,如◉,⬛︎,◔,➜,★,✦等。这些字符不在HTML上编码。他们就像你在这里看到他们一样。
该数据库上的其他字段是URL。
我知道我必须逃避这些字符以防止sql注入,并且还必须对它们进行编码以允许在数据库上插入。
htmlspecialchars
将不会处理这些符号,因为它们未在源上进行编码。 mysql_escape_string
只会逃避句号和双引号等。
我如何真正对此进行编码并在PHP
中进行转义,以便我可以在数据库中插入这些数据以及如何阅读它们?
感谢。
答案 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);