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

Posted

技术标签:

【中文标题】在mysql中插入时保留双引号和单引号以及转义字符【英文标题】:Preserving double and single quotes and escape characters when inserting in mysql 【发布时间】:2011-05-23 07:51:34 【问题描述】:

插入mysql时出现问题。

我在 javascript 中有一个多维数组,它被转换为 JSON 格式的字符串。 例如,字符串如下所示:

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

所以问题是这种格式在字段之外使用双引号,然后在内部有时我有单引号,以及转义字符\,如您所见。

如果我通过 ajax 将它从 javascript 发送到 php 并在 php 中解码,一切都很好,没有问题,完美。

当我需要将它插入mysql时,问题就来了。

    magic_quotes 在 php.ini 中随处可见 在插入 mysql 之前,我确实使用了 mysql_real_escape_string 函数

但是无论我做什么,插入都是成功的,但是在数据库中双引号被转换为单引号,并且\ 转义字符也消失了。

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

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

我已确保 php.ini 中的任何地方都关闭了 magic_quotes

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

【问题讨论】:

尝试使用 PDO (php.net/pdo) 代替;使用古老的 mysql 库并使用 mysql_real_escape_string 自己完成所有工作变得更加容易和可靠...... 非常有趣,谢谢你的建议,我会研究并尝试在下一个项目中使用 PDO,但是对于这个项目我无法更改整个代码,应该有一种方法可以修复它,希望没有pdo,事情是,在插入mysql时保留双引号和转义字符应该很容易完成:)我肯定做错了:)再次感谢你:) 【参考方案1】:

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

在旁注中,我建议您将问题写得尽可能简洁。人们倾向于跳过巨大的遗嘱。

【讨论】:

以上是关于在mysql中插入时保留双引号和单引号以及转义字符的主要内容,如果未能解决你的问题,请参考以下文章

在 Xpath 中同时转义双引号和单引号

Ansible 转义双引号和单引号

Perl双引号和单引号的区别

mysql 转义字符

PHP

PHP字符串定义方式和单引号双引号的区别