2011-02-07 31 views
0

我需要序列数组,它包含的URL:如何序列化URL并使其在PHP中仍然可读?

阵列( 'URL1'=> 'http://www.example.com', 'URL2'=>的“http://www.example1。 com' ) 并将其存储在数据库中。

当我序列化它的标准方式,它不工作,因为它包含特殊字符。我发现解决方案使用base64_encode进行编码。然后它可以工作,但在DB管理器程序中字符串不可读。有没有办法让这个工作没有base64_decode?

+0

请更具体一点:怎么*确实*“它不工作”?这是非常重要的。 – Piskvor 2011-02-07 15:26:47

+0

`json_encode`可能是另一种选择..但我不明白为什么`serialize()`首先会使URL不可读。你能举个例子吗? – 2011-02-07 15:27:03

+0

您的问题很可能来自引号/双引号PHP(和JSON)序列化机制使用。这使我相信,在将数据插入数据库时​​(例如:使用`mysql_real_escape_string`,PDO或等效数据),您不会正确地转义数据。 – netcoder 2011-02-07 15:28:52

回答

1
  1. 当您尝试将序列化数据存储在关系数据库中时,它应该始终引发红色标记。规范你的模式,所以你不必序列化。
  2. 以糟糕的格式存储数据,以便在数据库中可读,这不是一个好主意。您希望以对数据库系统最有效的格式存储它,然后在您准备好显示时更新您的管理器以将其反序列化。
  3. json_encode这些日子很流行,并有助于使您的数据便携。
1

如果您使用PHP 5+,请尝试使用JSON而不是本地PHP序列化程序。 JSON更便携。

但是你的问题可能是自动转义引号。如果您可以向数据库显示输入&输出的示例,那将会很有帮助。

0

没有理由为什么serialize不能在这个例子中工作,所以它可能更多的是在你的SQL查询中充分转义输入,而不是你正在做的序列化的问题。如果您使用的是MySQL,那么在将它连接到SQL语句之前,请尝试通过mysql_real_escape_string()运行序列化的数据。我倾向于使用json_encode()来将值序列化到数据库字段,因为serialise往往会产生非常难以手动读取的序列化数据,并且极难编辑。

相关问题