1

在我的页面上,当我向服务器输入数据时,它会在 ' 和 " 之前自动添加反斜杠。我猜这是因为 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?

4

2 回答 2

1

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

更好的解决方案是..

$city = $_POST['city'];

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

echo htmlspecialchars($city,ENT_QUOTES);

笔记

不推荐使用mysql函数

于 2013-08-05T18:05:53.880 回答
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)以考虑插入的字符?

希望有帮助!

于 2013-08-05T18:30:06.517 回答