输入数据库的数据会添加反斜杠

时间:2013-08-05 17:49:53

标签: php mysql

在我的页面上,当我向服务器输入数据时,它会在“和”之前自动添加反斜杠。 我猜它是因为mysql_real_escape_string,由于某种原因,它只在我的远程服务器上添加了反向串,而在localhost上它没有添加它们。 主要问题是我稍后显示输入的值,它有两个问题: 1.反斜杠使文字难以辨认,对眼睛不舒服。 2.它删除部分数据,因为它限制为140个字符。 我能做些什么来阻止他们? 我的代码:

$city = mysql_real_escape_string($_POST['city']);
//here preaty regular insert query.

在查询之后输入的数据以反斜杠插入到数据库中。 然后在另一页上:

//get data from DB
echo $city;

像这样剥离斜杠:

echo stripslashes($city);

无济于事,因为它没有解决问题#2 任何帮助和想法都将受到批评。

编辑:如果我有如下所述的magic_quotes模式,是否意味着我不必使用mysql_real_escape_string?

2 个答案:

答案 0 :(得分:1)

问题是您要转义变量,将其插入数据库,然后显示 转义 变量。

更好的解决方案是......

$city = $_POST['city'];

$query = "INSERT INTO table SET city = '".mysql_real_escape_string($city)."'";

echo htmlspecialchars($city,ENT_QUOTES);

注意

不推荐使用mysql函数

答案 1 :(得分:1)

如果您无法编辑php.ini文件以禁用魔术引号,请尝试以下操作......

if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
{
    function undo_magic_quotes_gpc(&$array)
    {
        foreach($array as &$value)
        {
            if(is_array($value))
            {
                undo_magic_quotes_gpc($value);
            }
            else
            {
                $value = stripslashes($value);
            }
        }
    }

    undo_magic_quotes_gpc($_POST);
    undo_magic_quotes_gpc($_GET);
    undo_magic_quotes_gpc($_COOKIE);
}

我在转义变量之前运行它,但请记住,一旦转义变量(通过mysql_real_escape_string()),字符限制可能仍会增加。为了帮助解决这个问题,您可以对用户的输入设置字符限制,但是要使后端限制稍微高一些(例如160-170)以考虑插入的字符?

希望有所帮助!