为什么检查striplashes功能是否存在?

时间:2015-11-04 18:09:47

标签: php stripslashes

我找到了以下代码来检查stripslashes()函数是否存在。

if ( function_exists( 'stripslashes' ) ) {
    // Do something
} else {
    // Do something
}

stripslashes()函数适用于PHP4和PHP5,所以我想知道为什么它需要条件语句来检查函数是否存在。我不明白。

这不是一个主观问题。只是告诉我这个语句的用法与不使用它之间有什么区别。提前谢谢!

以下是关于它们使用位置的相关链接:

2 个答案:

答案 0 :(得分:3)

以前在PHP中有一个称为magic quotes的功能,虽然善意,却引起了无穷无尽的混淆。

这个代码最有可能用于检测魔术引号,但这不是正确的方法,尤其是因为它不起作用。

检测是否启用魔术引号的正确方法是使用为purpoes get_magic_quotes_gpc这样的功能。

if (get_magic_quotes_gpc()) {

或者以下,如果您担心这将被删除。

if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {

话虽如此,整个魔术引号功能已经在PHP 5.4中删除了,所以除非你需要支持过时版本的PHP,否则你可以忘记整个事情(除非你使用WordPress ......)

另一方面,我认为stripslashes功能可能在将来被移除,并且可能不会在某一时刻存在,但在这种情况下可能不会原因。

答案 1 :(得分:3)

旁注:从我的一些评论(稍加修改)中转录,以提供对亚历山大的答案的补充答案。

这可能是为了检查一些编码器是否去了并创建了一个名为相同的自定义函数(某人的疯狂方法?),或者有人攻击了PHP核心并删除了它;我当然在推测,这并非不可能。

然而,if ( function_exists( 'mysql_real_escape_string' ) )同样如此。

如果服务器不支持那些旧的并且已弃用的mysql_ functions,则需要使用条件语句,并证明该语句对于使用该类型的某些内容是有效/有用的。

引用:(自PHP 7起删除mysql_,以及其他弃用声明)

就个人而言,function_exists()只应用于可能已弃用的函数; mysql_是其中之一session_register() - 我相信还有更多。

它在手册中列出了贡献笔记http://php.net/manual/en/function.stripslashes.php,根据Alexander(O'Mara)在评论中的说法,它似乎与magic_quotes_gpc有关。

<强> N.B:

我绝不想从中获得任何东西,但是对于其他人来说这个问题。