【问题标题】:data entered to database adds back slashes输入数据库的数据添加反斜杠
【发布时间】:2013-08-05 17:49:52
【问题描述】:

在我的页面上,当我向服务器输入数据时,它会自动在 ' 和 " 之前添加反斜杠。 我猜是因为mysql_real_escape_string,由于某种原因,它只在我的远程服务器上添加了backstrings,而在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?

【问题讨论】:

  • 好吧,可能是这样,问题是我无权访问我的站点所在服务器上的配置文件。如果我从查询中手动删除反斜杠,escape_string 是否仍然存在问题?
  • 插入数据库的数据是不是带反斜杠?
  • 不。我想它确实取消了 escape_string 的全部目的
  • 数据不应该在数据库中有反斜杠

标签: php mysql


【解决方案1】:

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

更好的解决方案是..

$city = $_POST['city'];

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

echo htmlspecialchars($city,ENT_QUOTES);

注意

不推荐使用mysql函数

【讨论】:

  • 感谢您的回答,不幸的是它对我不起作用。我仍然得到那些“魔法斜线”,现在我增加了变量的大小并手动删除它们......但这不是最佳的
  • 我想我第一次误解了你的问题
【解决方案2】:

如果您无法编辑 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)以考虑插入的字符?

希望有帮助!

【讨论】:

    猜你喜欢
    • 2014-04-07
    • 2018-10-16
    • 2013-10-08
    • 2015-10-23
    • 2020-12-10
    • 1970-01-01
    • 2018-07-15
    • 2019-07-04
    • 2016-07-09
    相关资源
    最近更新 更多