2010-12-10 105 views
1

當我插入到mysql時遇到問題。插入到mysql時保留雙引號和單引號以及轉義字符

我有一個JavaScript中的多維數組,它被轉換成JSON格式的字符串。 字符串看起來像這樣的例子:

[["text1","text2","te'xt with apostroph'e"],["subarray2","a \u000a unicode number","change line \n \n"]]

所以事情是,這種格式使用的字段外雙引號,然後裏面有時我有單引號和轉義字符\,你可以看到。

如果我通過ajax將這個javascript發送到php並在php中解碼它,它一切正常,沒有問題,完美。

當我需要將它插入到mysql時,問題出現了。

  1. magic_quotes的是關閉無處不在php.ini
  2. 我使用mysql_real_escape_string功能之前,我在mysql中插入

但無論我做什麼,插入是成功的,但在數據庫中的雙引號得到轉換爲單引號,並且\轉義字符消失。

所以數據庫裏面我留下這樣的:

[['text1','text2','te'xt with apostroph'e'],['subarray2','a u000a unicode number','change line n n']]

當然,這是一個問題,因爲我需要保留雙引號,這樣,當我讀到這從PHP以後,我可以解碼JSON,並且仍然在文本中保留單引號。另外\n新行和\u000a unicode字符不再工作了,因爲轉義字符已經消失。

我發現訣竅htmlspecialchars($thephrase, ENT_QUOTES); 它將雙引號轉換爲&quot。這至少可以保留我的雙引號和單引號分開,但這顯然不是理想的解決方案,再加上我還是失去了逃生\個字符。

有些東西顯然是錯誤的,我在做什麼或配置,問題與JSON無關,如果我直接在mysql中插入雙引號和單引號,雙引號會轉換爲單引號。

所以無論如何,我想是在一個文本中,我有雙引號,單引號,轉義字符和換行符,我怎樣才能確保,當我插入所有在MySQL中,我保留所有那些在mysql varchar或text字段中;雙引號,單引號,\換碼符和換行符?

我已經確保magic_quotes的是關閉無處不在php.ini

非常感謝您提出的任何建議或幫助。

+0

嘗試使用PDO(http://www.php.net/pdo)代替;使用古老的mysql庫以及使用mysql_real_escape_string自己完成所有工作更容易,更可靠... – 2010-12-10 07:13:00

+0

非常有趣,感謝您的建議,我將研究並嘗試在下一個項目中使用PDO,但對於此項目,我無法使用改變整個代碼,應該有一種方法來解決它希望沒有pdo,事情是,保留雙引號和轉義字符時,插入到mysql應該很容易完成:)東西我做錯了肯定:)再次感謝你: ) – 2010-12-10 07:46:46

回答

1

現在你應該已經解決了你的問題。爲了將來的參考,我認爲你正在尋找的是php的addslashes()或更具體的mysqli_real_escape_string()。這些函數將轉義需要在數據庫查詢中引用的字符。

在附註中,我建議您儘可能簡潔地編寫問題。人們傾向於跳過巨大的遺囑。