PHP:POST-data+;撇号

PHP:POST-data+;撇号,php,serialization,quotes,apostrophe,Php,Serialization,Quotes,Apostrophe,想象一下: 表单数据包含一个撇号 表格被提交 POST数据被序列化 POST数据被写入数据库 检索数据库数据 数据不能取消序列化 在序列化数据中发现问题。我试着不用撇号,也用撇号: s:7:“公司”;s:12:“Joes公司” s:7:“公司”;s:14:“乔的公司” 我知道POST数据会在引号和撇号中添加斜杠,但我的斜杠会被删除,这会破坏序列化。我没有在任何地方使用stripslashes()函数-有什么想法吗?如果您正在将序列化数据写入数据库,并且没有使用任何关系或高级数据库功能,那

想象一下:

  • 表单数据包含一个撇号
  • 表格被提交
  • POST数据被序列化
  • POST数据被写入数据库
  • 检索数据库数据
  • 数据不能取消序列化
在序列化数据中发现问题。我试着不用撇号,也用撇号:

  • s:7:“公司”;s:12:“Joes公司”
  • s:7:“公司”;s:14:“乔的公司”

我知道POST数据会在引号和撇号中添加斜杠,但我的斜杠会被删除,这会破坏序列化。我没有在任何地方使用stripslashes()函数-有什么想法吗?

如果您正在将序列化数据写入数据库,并且没有使用任何关系或高级数据库功能,那么您只需在插入数据库之前对序列化数据进行base64编码,然后在读取时进行解码即可

你确定要添加斜杠吗?只有启用了魔引号,才会出现这种情况。

您可能可以通过查看列出的每个阶段的输出来了解这一点。魔引号已启用,斜杠已添加。我将范围缩小到以下几点:在我的SQL查询中,我用撇号将值括起来。尝试以下操作,您将看到“$test=”“company”;s:14:“Joe's company”;echo$test;“返回不带斜杠的字符串。这就是为什么斜杠在数据库中不出现一次。但是,既然序列化的字符串有引号和撇号,我如何在不使用引号和撇号的情况下插入DB?!我找到了解决办法。即使Magic Quotes在POST数据中添加了斜杠,您也必须对序列化字符串执行进一步的addslashes(),以便将其添加到数据库中,并用引号或撇号关闭。一旦从数据库中检索到值并取消序列化,就可以使用stripslashes()。