【问题标题】:PHP - How to serialize data with special characters from database?PHP - 如何使用数据库中的特殊字符序列化数据?
【发布时间】:2015-08-07 10:05:45
【问题描述】:

我有一个带有特殊字符的字符串,例如:

$text = "NÃO";

当我使用序列化($text)时,返回

a:1:{i:0;s:4:"NÃO";}

但是当我使用从数据库中获取的字符串时,例如:

$query = SELECT special_text FROM ...
(...)
$text = $row->"special_text"
serialize($text);

返回

a:1:{i:0;s:3:"NÃO";}

,是什么让我的脚本崩溃了。

当我从数据库中序列化数据时我必须做什么? 谢谢,对不起我的英语

【问题讨论】:

  • 不要序列化它。设置数据库的字符编码和数据库连接为utf-8,忘记编码问题。
  • 问题是我必须序列化我的数据,我正在从未序列化的数据库导入需要序列化数据才能工作的数据库。所以我需要从旧数据库中获取一个数组,序列化,然后插入新数据库,明白了吗?不幸的是我不能改变数据库的结构。

标签: php database serialization


【解决方案1】:

如果您不想使用 utf-8,请尝试在将序列化字符串保存到 db 之前对其进行编码,并在检索后解码。您可以使用 base64 编码,只要您在数据库中使用任何 8 位编码。这种方法将数据大小增加了 4/3。或者您可以在您的数据库中使用二进制(BLOB)字段并使用 gzip 或类似的东西对您的数据进行编码。对于大量文本非常有用,但会增加 CPU 负载。

【讨论】:

  • 我不能改变数据的反序列化方式,所以我无法解码数据。我不明白为什么字符串“NÃO”返回 4 个位置,但我的数据库中的相同字符串只返回 3 个。
猜你喜欢
  • 2021-07-06
  • 2018-08-17
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 2013-10-05
  • 2015-04-06
相关资源
最近更新 更多