带有重音字符的PHP serialize()导致不完整的序列化

时间:2018-03-08 16:30:37

标签: php mysql encoding paypal utf-8

我正在使用PayPal IPN并将IPN数据消息插入我们的数据库。我注意到它是一个部分对象。我假设序列化失败而不是插入。数据库或服务器未报告错误。

例如,这是部分序列化。第一部分由我留下:

... s:1:"4";s:12:"address_city";s:23:"COACALCO DE BERRIOZ

它在BERRIOZ之后直接停止。没有收尾报价等。

该值为address_city = COACALCODEBERRIOZÁBAL。所以它停止了重音字符。

字符编码为UTF-8。我验证了编码:

echo mb_internal_encoding();

它报告了UTF-8。 我还确保mysqli charset是UTF-8:

mysqli_set_charset($connect, "utf8");

就像我报道的那样,数据库或错误处理程序没有错误?使用非重音值对IPN对象进行了序列化。我在尝试查看记录时发现了这个问题,并且unserialize()报告了一个问题。

1 个答案:

答案 0 :(得分:0)

这闻起来像"截断" MySQL的问题是utf8 / utf8mb4。请参阅"截断"在Trouble with UTF-8 characters; what I see is not what I stored

可能Á未编码为utf8(十六进制C381),而是编码为latin1(十六进制C1)。

计划A:让客户使用utf8而不是latin1。

计划B:通过说

声明客户端正在使用latin1
mysqli_set_charset($connect, "latin1");