2010-11-19 29 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