PHP - 从撇号中删除反斜杠

时间:2009-07-06 19:08:19

标签: php

以下代码允许用户以简单的英语输入短语,然后将其作为“$ site”添加到数据库中。如果用户输入撇号,则短语将在撇号前面以反斜杠存储。如何在变量前面没有反斜杠的情况下将变量“$ site”添加到数据库中?

提前致谢,

约翰

print   "<div class=\"siteadd\">
        <form action='process.php?find=$find1' method='post'>
        Add a book to this topic: <input name='site' type='text' size='50'>
        <input type='submit' value='Submit'>
        </form> 
        </div>";

然后,在process.php上:

$site = str_replace($remove_array, "", $_POST['site']);
$site = strtolower($site);
$site = mysql_real_escape_string($site);
$illegal = array("/", "\"");
$site = str_replace($illegal, '', $site);

mysql_query("INSERT INTO `$find` VALUES (NULL, '$site',1,0)");

3 个答案:

答案 0 :(得分:6)

我认为出于安全原因,PHP会添加反斜杠。详细了解magic quotes。因为你正在使用正确的函数来转义传递给mysql查询的字符串,所以你不必依赖PHP的虚拟转义。

在脚本的开头,检查magic_quotes是否已打开,如果是,请删除斜杠:

if (get_magic_quotes_gpc()) {
    function stripslashes_deep($value)
    {
        $value = is_array($value) ?
                    array_map('stripslashes_deep', $value) :
                    stripslashes($value);

        return $value;
    }

    $_POST = array_map('stripslashes_deep', $_POST);
    $_GET = array_map('stripslashes_deep', $_GET);
    $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
    $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
}

顺便说一下,在您的代码中,$find变量来自不受信任的来源,也应该进行转义/过滤。

答案 1 :(得分:1)

调用mysql_real_escape_string()可能是原因(http://us2.php.net/mysql_real_escape_string),但您可能还在服务器上启用了魔术引号(http://php.net/manual/en/security.magicquotes.php)。

答案 2 :(得分:1)

使用mysqli::prepare,然后在生成的bind_param上使用mysqli_stmt。这也会阻止其他类型的SQL注入。