2010-11-19 25 views
1

我想知道是否有人知道一个PHP设置会自动转义双引号。是否有PHP配置会自动转义双引号?

我的问题是,我的本地服务器上,我张贴此字符串到服务器:

{"0":{"id":"19","goal":"34"},"1":{"id":"22","goal":"657675"},"2":{"id":"21","goal":"456"}} 

,它工作正常。然而,在生产服务器上,我发表了相同的字符串,而当我赞同它时它更改为:

{\"0\":{\"id\":\"19\",\"goal\":\"34\"},\"1\":{\"id\":\"22\",\"goal\":\"657675\"},\"2\":{\"id\":\"21\",\"goal\":\"456\"}} 

我设法用string_replace()调用修复它,但我想知道为什么这发生了。生产服务器和本地服务器使用相同的代码,并更新为使用相同的数据,所以我假设这种差异必须由服务器设置引起,但我从来没有听说过这样做的设置。

任何人都经历这样的事情?

回答

11

是的。这就是所谓的魔术引号:

http://php.net/manual/en/security.magicquotes.php

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

你通常要关闭这个功能,并且手动处理逃逸是必要的。

+3

+1(打我吧)。我还建议阅读[本文档部分](http://php.net/manual/en/security.magicquotes.php)... – ircmaxell 2010-11-19 19:53:32

+0

@ircmaxell谢谢,我已经添加了链接到我的答案:) – 2010-11-19 19:54:38

+0

谢谢一堆。现在你们提到它了,我已经听到了很多关于魔术引语的内容,但是我想我并不完全明白他们做了什么。我们使用其他防止SQL注入的方法,这应该不是问题。我真的很讨厌当我解决问题而不理解问题,所以再次感谢! – 2010-11-19 20:16:07

-3

你可以尝试在发布的数据使用单引号,而不是双

+1

单引号也会被转义。他需要关闭magic_quotes_ *。 – 2010-11-19 19:53:24

2

这通常是用“魔术引号”的问题。他们是邪恶的,IMO。如果可能的话,你should disable them

他们是为了保护你免受SQL注入攻击,所以要小心你禁用它们之后。

+2

虽然它们在保护SQL注入攻击方面并不十分有效,但如果您依赖于它们,则无论如何都需要对代码进行审计。 :) – Quentin 2010-11-19 19:55:11

+0

事实。我过去使用过mysql_real_escape_string,但后来转移到了PDO/Active Record。一旦你掌握了它,PDO是相当不错的。 – jocull 2010-11-19 20:01:46