2012-02-10 41 views
1

我已经继承了需要在我的PHP5服务器上运行的php4站点,我已经解决了大部分问题,但无法弄清楚作者在此尝试做什么。嗯,准确地说,他正在引用提交的文本,但我不确定这个函数应该如何工作,以及我应该如何在PHP5中执行它?转义引号 - 从PHP4转移到PHP5

# Function to safely add slashes when magic quotes is switched off 

function safe_slash($string) 
{ 
    if (!get_magic_quotes_gpc()) 
    { 
    $string = addslashes($string); 
    } 

    return $string; 
} 
+0

如果'get_magic_quotes_gpc'已关闭,则代码将斜杠添加到'$ string'中....相同的代码将以PHP5运行... [readSlashes()](http://www.php.net/ manual/en/function.addslashes.php) – ManseUK 2012-02-10 10:00:21

+0

表示您在使用此代码时遇到问题。 **它是什么**? – 2012-02-10 10:08:28

+0

对不起,问题是斜杠没有被添加到字符串,所以如果我有一个像O'Leary这样的名字,'不会被转义并且查询失败。 – deep64blue 2012-02-10 10:22:17

回答

2

默认情况下PHP4在php.ini中的一个选项打开名为magic_quotes_gpc,它将addslashes所有$_POST/$_GET变量。

如果值magic_quotes_gpc的是关闭的,如果是,将addslashes到$字符串通过该代码简单地检查。

应该在PHP4和PHP5的工作(在PHP6 magic_quotes_gpc的将被删除我相信)。不建议依赖,但它最初是为了“保护”SQL注入,但它被发现是不够的。

+0

谢谢 - 现在推荐的方法是什么?mysqli_real_escape_string ? – deep64blue 2012-02-10 12:32:37

+0

有几种推荐的方法,'mysqli_real_escape_string'确实比依赖魔术引号有所改进。更大的改进是使用预准备语句和参数化查询(例如[PDO](http://www.php。 net/manual/en/class.pdo.php)),所以你不必担心自己逃脱字符串。 – pjumble 2012-02-10 13:12:46

-1
$_POST = self::addSlashesRecursive($_POST); 
$_GET = self::addSlashesRecursive($_GET); 
$_COOKIE = self::addSlashesRecursive($_COOKIE); 

function addSlashesRecursive($s) 
{ 
    if (get_magic_quotes_gpc()) { 
     return $s; 
    } 
    if (is_string($s)) { 
     return addslashes($s); 
    } else if (is_array($s)) { 
     return array_map(array('addSlashesRecursive'), $s); 
    } 
    return $s; 
} 

但我的脑海里会得到更好的改变你的代码。在PHP6中,magic_quotes将被删除。