我正在寻找从存储在MySql数据库中的序列化数组中提取一些数据。我继承了这一点,一些记录被打破,但我仍然可以提取一些信息。当我反序列化它时,会返回一个错误,所以不幸的是这个问题不存在。使用preg_match在PHP中提取部分序列化数据
这是一些序列化的数据: -
s:16:"current_postcode";s:8:"TT12 3TT";
我期待提取刚刚从这个使用的preg_match的价值,但我需要一些帮助,试图在PHP中提取此。
你能帮忙吗?
我正在寻找从存储在MySql数据库中的序列化数组中提取一些数据。我继承了这一点,一些记录被打破,但我仍然可以提取一些信息。当我反序列化它时,会返回一个错误,所以不幸的是这个问题不存在。使用preg_match在PHP中提取部分序列化数据
这是一些序列化的数据: -
s:16:"current_postcode";s:8:"TT12 3TT";
我期待提取刚刚从这个使用的preg_match的价值,但我需要一些帮助,试图在PHP中提取此。
你能帮忙吗?
你可以试试这个:
preg_match_all('/"([^"]+)"/', $data, $matches);
或
preg_match_all('/(?:s:16:|s:8:)"([^"]+)"/', $data, $matches);
,但最后一个是唯一有效的,如果你总是有S:16或S:8(数据的长度项目)为您正在寻找的数据的给定部分。否则它不会是正确的
这个句柄如何在字符串中转义引号? 's:12:“Some \”text \“”' –
长度确实发生了变化,因为我们的邮编只有5个字符和8个字符。有没有什么可以弥补这种可能性? –
基本上我只是想从上面的代码返回TT12 3TT。 –
任何有效的理由,你不能只是反序列化它?如果你需要查询一部分序列化的数据,那么你的数据库设计可能不好。 – ShiraNai7
嗨ShiraNai7,我已经继承了上面已经表达过的这个数据库,并且一些数据被破坏了。这就是为什么我想这样做。有400,000条记录,所以我不会尽快解决它的任何问题。 –
定义“破碎”。你也可以发布整个序列化的字符串,而不仅仅是它的一部分。 – ShiraNai7