在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中插入时保留双引号和单引号以及转义字符的主要内容,如果未能解决你的问题,请参考以下文章