在mysql中插入时保留双引号和单引号以及转义字符

时间:2010-12-10 06:49:39

标签: mysql json double quotes

插入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. 中无处不在
  3. 我在插入mysql之前使用mysql_real_escape_string函数
  4. 但无论我做什么,插入都是成功的,但在数据库中双引号转换为单引号,\转义字符也会消失。

    所以在数据库里面我留下了这个:

    [['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字段中;双引号,单引号,\转义字符和换行符?

    我确保在php.ini中无处不在magic_quotes

    非常感谢您的任何建议或帮助。

1 个答案:

答案 0 :(得分:1)

现在你应该已经解决了你的问题。为了将来参考,我认为你要找的是php的addslashes()或更具体的mysqli_real_escape_string()。这些函数将转义需要在数据库查询中引用的字符。

另外,我建议您尽可能简洁地写下您的问题。人们倾向于跳过巨大的遗嘱。