最佳解决方案 在您的 php.ini 文件中,magic_quotes_gpc 指令可能设置为 on。出于安全原因,应禁用此功能。如果您无权访问 php.ini 文件(例如,在共享主机上),您始终可以使用 .htaccess 指令完成相同的操作(假设这是一个 apache 服务器)。
在你的 php.ini
magic_quotes_gpc Off
在 .htaccess 文件中:
php_flag magic_quotes_gpc Off
为什么会这样?
发生这种情况的原因是由于以下逻辑过程。
需要转义的字符串被发送到服务器。这是我的字符串。这很棒。Magic Quotes 在到达您的代码之前转义了撇号。这是我的字符串。太棒了 mysql_real_escape_string 现在有两个字符要转义,反斜杠 \ 以及撇号 \'。这是我的字符串。It\\'s awesome 这个新的超级转义字符串存储在数据库中。当从数据库中检索字符串时,它被传递给 stripslashes。这将删除在步骤 3 中添加的两个转义,但由于其中一个反斜杠已被转义,因此 stripslashes 认为它属于。这是我的字符串。太棒了 当您将这些字符串重新提交到数据库时,这个问题真的会失控,因为每次反斜杠的数量都会成倍增加。
替代解决方案 一个快速简单的替代方法是在将字符串传递给 mysql_real_escape_string 之前简单地删除由 magic_quotes 添加的斜线。
$str = stripslashes($code);
$str = mysql_real_escape_string($str);