PHP分隔引号


PHP Delimiting Quotation marks

我正在开发一个PHP注释系统,在写入注释文件时遇到了注释者的引号被分隔的问题,因此输出将像这样结束,例如:"那是你爸爸的!"这对他来说很特别!"(随机的句子)。如何禁用此功能?

在数据库查询中添加反斜杠是为了防止SQL注入。当您从数据库中检索注释时,您可以使用stripslashes()函数来删除它们。

你还应该看看魔术引号

这取决于PHP版本和它的配置。旧版本(比5.3早)默认启用了此功能。它在您发布评论时添加引号(因此它将与引号一起存储在数据库中)。您可以禁用此行为:

http://cz.php.net/manual/en/function.get-magic-quotes-gpc.php

http://cz.php.net/manual/en/function.set-magic-quotes-runtime.php

http://cz.php.net/manual/en/info.configuration.php ini.magic-quotes-gpc

对于现有的注释,您必须运行一些清理脚本来获取所有行,对其执行stripslashes()并将其保存回来。逃避你的查询应该由mysql_real_escape()无论如何,依靠魔术引号是自杀,所以如果你考虑一下,它是更安全的,完全关闭它们,手动逃避查询。

关闭php.ini中的gpc_magic_quote 's。

这些反斜杠是用来从SQL引擎转义引号的。

这种编程风格在mysql_*系列函数中非常常见,这些函数直接从程序中获取字符串,并直接在数据库引擎中执行。众所周知,这很容易受到SQL注入攻击,并且正如您所发现的那样,会破坏您的数据。(当一致地应用时,您总是可以使用stripslashes()函数在返回用户的途中对数据进行还原,但是也必须一致地执行)

在我看来,更好的方法是使用准备好的语句,让数据库库直接将数据插入数据库,而不涉及任何转义或非转义。这也完全消除了SQL注入攻击的风险。(尽管您仍然可以自由地编写不安全的代码。)