3

在 PHP 中使用默认魔术引号或用户定义的 addlash/stripslash 哪个更好?我想用最好的。请帮我。

4

4 回答 4

5

手动完成!魔术引号在 PHP 5 中已被弃用,并且在 PHP 6 中被完全删除。不仅如此,它们还是纯粹的邪恶!它们会在您甚至无法想象的地方造成错误。显式总是比隐式好(正如 Python 所说)。

于 2009-09-09T14:14:33.937 回答
2

如果您要关闭魔术引号,请不要仅将其替换为您自己的所有输入中自动转义引号的系统。关键是:自动逃避一切是一个坏主意。您应该只在将某些内容传递给应用程序的另一个系统或层之前对其进行转义。每个系统对转义都有不同的要求。

例如,如果您要输出 HTML,请在输出字符串变量之前使用 htmlspecialchars()。如果要将 SQL 发送到数据库,请使用为该数据库设计的转义函数之一,例如 mysql_real_escape_string()。如果您正在创建 XML 文档,请使用 PHP 的 XML 库之一;这些会为你逃跑。

没有一种万能的逃避解决方案。这就是为什么魔术引号不好的原因。

于 2009-09-09T15:01:03.467 回答
1

两者都不。

魔术语录是万恶之源!(在我看来甚至比过早优化xD还要糟糕)

当有原生 php 函数时,为什么要创建用户定义的 ( add| ) 斜杠函数?strip

如果您想转义数据库的日期,请使用数据库特定功能(例如mysqli_real_escape_string

编辑。完成我的回答(在评论中与 sadi 辩论后):

  • 如果要显示/输出一些输入,请使用htmlspecialchars

  • 如果您要在 URL 中使用您的输入,请使用urlencode

因此,没有最佳或正确的单一方法来编码您的数据。你必须在正确的时间在正确的地方使用正确的功能。每个都有自己的目的(见这里:http: //xkcd.com/163/

于 2009-09-09T14:15:16.700 回答
1

最好不要使用魔术行情。如果您在脚本开头使用以下命令关闭它们:

set_magic_quotes_runtime(0);

您可以使您的应用程序与早期版本的 PHP 向后兼容,同时为当前版本的 PHP 进行编码,其中它们已被贬低,以及它们被完全删除的未来版本。

自己从字符串中删除引号是一种很好的做法,当出现问题时,您知道它在您自己的代码中,而不是 PHP 设置或与您当前使用的 PHP 版本不兼容。

希望有帮助。

于 2009-09-09T14:19:42.797 回答