php unserialize返回false

时间:2017-06-19 06:34:01

标签: php mysql serialization

我有以下问题。我正在检索一个mysql文本字段,它是发票的序列化文本。我在两个不同的项目中工作。两者都有相同版本的PHP。数据已导出&从db导入到db。如果我从db1 var_dump数据它告诉我它的长度是x。当我从db2做同样的事情时,得到x + 2

  

的字符串(595)   “一个:3:{S:11:” 的UserDetails “;一个:20:{S:4:” 姓名 “; S:3:” BAS “; S:8:” 姓氏 “; S:7:” 施米茨” ; S:5: “电子邮件”; S:17: “email@test.de”; S:6: “街道”; S:11: “frstenwall”; S:7: “STREET2”; S:0 : “”; S:7: “公司”; S:0: “”,S:3: “拉链”; S:5: “40215”; S:9: “居住”; S:10:“d杜塞尔多夫 “; S:7:” 国家 “S:7:” 德国 “; S:5:” 电话 “; S:7:” 3033185 “S:3:” 传真 “S:0:”“; S:10: “的customerID”; I:202771; S:2: “NR”; S:3: “228”; S:6: “区域”; S:3: “NRW”; S:10:“phone_code “S:3:” 211 “; S:8:” fax_code “; S:0:” “S:10:” 称呼 “; S:2:” MR “; S:5:” 销售“; S 0: “”; S:12: “COUNTRY_CODE”; S:0: “”,S:10: “VAT_NUMBER”; S:0: “”;} S:6: “结构域”; S:15:” bas-schmitz2.de “; S:10:” has_domain “; b:1;}”


  

的字符串(597)   “一个:3:{S:11:” 的UserDetails “;一个:20:{S:4:” 姓名 “; S:3:” BAS “; S:8:” 姓氏 “; S:7:” 施米茨” ; S:5: “电子邮件”; S:17: “email@test.de”; S:6: “街道”; S:11: “fürstenwall”; S:7: “STREET2”; S:0:” “; S:7:” 公司 “; S:0:” “S:3:” 拉链 “; S:5:” 40215 “; S:9:” 居住 “; S:10:” 杜塞尔多夫“; S :7: “国家”,S:7: “德国”; S:5: “电话”; S:7: “3033185”,S:3: “传真”; S:0: “”; S:10: “的customerID”; I:202771; S:2: “NR”; S:3: “228”; S:6: “区域”; S:3: “NRW”; S:10: “phone_code”; S: 3: “211”; S:8: “fax_code”; S:0: “”,S:10: “称呼”; S:2: “MR”; S:5: “销售”,S:0:” “; S:12:” COUNTRY_CODE “; S:0:” “S:10:” VAT_NUMBER “; S:0:” “;} S:6:” 结构域 “; S:15:” 浅schmitz2。得 “; S:10:” has_domain “; b:1;}”

当我粘贴这些时,我可以看到显示德语字符时存在差异

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

serialize()的输出无法以纯文本形式处理:

  

返回值

     

返回包含值的字节流表示形式的字符串   可以存储在任何地方。

     

请注意,这是一个二进制字符串,可能包含空字节,和   需要存储和处理。例如,serialize()   输出通常应存储在数据库的BLOB字段中,   而不是CHARTEXT字段。

因此,您的数据首先会被破坏。

如果您无法更改数据库设计(这将是正确的修复),您需要使用纯文本编码(如Base64)重新编码序列化数据:

$encoded = base64_encode(serialize($foo));
$decoded = unserialize(base64_decode($encoded));