Php preg_replace导致字符编码错误
我使用一个函数来避免表单中的sql注入。到目前为止,它工作得很好,直到我注意到,在提交字段时,一些字符被html实体替换并以这种方式显示 表格: 数据库: 通过对代码进行注释,我能够确定以下行是导致错误的原因:Php preg_replace导致字符编码错误,php,regex,character-encoding,preg-replace,html-entities,Php,Regex,Character Encoding,Preg Replace,Html Entities,我使用一个函数来避免表单中的sql注入。到目前为止,它工作得很好,直到我注意到,在提交字段时,一些字符被html实体替换并以这种方式显示 表格: 数据库: 通过对代码进行注释,我能够确定以下行是导致错误的原因: $sql=preg_replace("/(from|select|insert|drop|table|delete|show tables|where|alter table|add|update|#|\*|--|=|xp_|NULL|KEY|\\\\)/","",$sql); 拆
$sql=preg_replace("/(from|select|insert|drop|table|delete|show tables|where|alter table|add|update|#|\*|--|=|xp_|NULL|KEY|\\\\)/","",$sql);
拆下这条线后,工作正常
完整查看防喷射功能:
function kill_injection($sql)
{
if(is_array($sql))
{
for($i=0; $i<count($sql); $i++)
{
$sql[$i]=preg_replace("/(from|select|insert|drop|table|delete|show tables|where|alter table|add|update|#|\*|--|=|xp_|NULL|KEY|\\\\)/","",$sql[$i]);
if(is_string($sql[$i]))
{
$sql[$i]=str_replace("\r\n", " ", $sql[$i]);
$sql[$i]=str_replace("\n", " ", $sql[$i]);
$sql[$i]=str_replace("\r", " ", $sql[$i]);
$sql[$i]=trim($sql[$i]);
$sql[$i]=strip_tags($sql[$i]);
$sql[$i]=mysqli_real_escape_string(mysqli_connect("localhost", "root", "", "database"), $sql[$i]);
$sql[$i]=addslashes($sql[$i]);
$sql[$i]=preg_replace('/(\s)+/', ' ', $sql[$i]);
}
}
}
else
{
$sql=preg_replace("/(from|select|insert|drop|table|delete|show tables|where|alter table|add|update|#|\*|--|=|xp_|NULL|KEY|\\\\)/","",$sql);
if(is_string($sql))
{
$sql=str_replace("\r\n", " ", $sql);
$sql=str_replace("\n", " ", $sql);
$sql=str_replace("\r", " ", $sql);
$sql=trim($sql);
$sql=strip_tags($sql);
$sql=mysqli_real_escape_string(mysqli_connect("localhost", "root", "", "database"), $sql);
$sql=addslashes($sql);
$sql=preg_replace('/(\s)+/', ' ', $sql);
}
}
return $sql;
}
函数kill\u注入($sql)
{
if(is_数组($sql))
{
对于($i=0;$i当您可以使用参数并通过注入来完成时,您为什么需要执行所有这些操作?参数?请更具体一点。我还是信息安全方面的初学者。例如,请参阅。总是有现成的方法来处理事情,这样您就不必自己或在使用mysqli规范时进行可能损坏的实现@SamiKuhmonen说:“我当然会使用过程式PHP,但不确定它是否适用。”