当我回应: mysqli_real_escape_string($ dbc,'“conn”e“cting”');
在我的远程和本地服务器上输出:\“conn \”e \“cting \”
它应该是怎么回事,但问题是,它在本地数据库中保存[“conn”e“cting”]数据库,同时保存[\“conn \”e \“cting \”]后斜杠到我的远程数据库。我应该配置我的远程数据库吗?怎么样?我正在使用nearfreespeech的服务。
谢谢!
答案 0 :(得分:4)
您的远程php.ini
已启用magic quotes。
您可以通过运行来检查......
var_dump(get_magic_quotes_gpc()); // True means it is enabled
它将逃脱所有GET,POST&自动COOKIE超级全局 - 但随后再次转义会留下一个将插入的斜杠。
禁用服务器上的魔术引号,或者如果无法禁用它们,请使用魔术引号禁用功能。
对于它的地狱,这是我刚刚编造的一个
if (get_magic_quotes_gpc()) {
function stripSlashesRecursive($array) {
$stripped = array();
foreach($array as $key => $member) {
if (is_array($member)) {
$stripped[stripslashes($key)] = stripSlashesRecursive($member);
} else {
$stripped[stripslashes($key)] = stripslashes($member);
}
}
return $stripped;
}
$globals = array('_GET', '_POST', '_COOKIE', '_REQUEST');
foreach($globals as $global) {
$$global = stripSlashesRecursive($$global);
}
}
答案 1 :(得分:1)
如果你正在运行PHP 5.3,这应该可以解决问题:
if ((get_magic_quotes_gpc() === 1) && (version_compare(PHP_VERSION, '5.3.0', '>=') === true))
{
$_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS | JSON_HEX_QUOT)), true);
$_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS | JSON_HEX_QUOT)), true);
$_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS | JSON_HEX_QUOT)), true);
$_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS | JSON_HEX_QUOT)), true);
}
答案 2 :(得分:0)
我认为更简单的解决方案是在脚本中将运行时魔术引号的php.ini指令设置为0,如下所示:
ini_set('magic_quotes_runtime', '0');
Magic_quotes_gpc是一个单独的指令,仅适用于Get / Post / Cookie操作Axil。 ini_set()函数可用于临时更改php.ini设置(脚本的生命周期)。它将确保您在所有服务器上获得相同的行为。参数是您要设置的指令的名称和新值,两者都是字符串形式。
祝你好运!