0
我想從數據庫查詢中反序列化一個長文本(utf8_unicode_ci),但是當我這樣做時出現以下錯誤。反序列化偏移量錯誤,字符串長度似乎太長
unserialize(): Error at offset 6 of 737 bytes
我猜我的字符串是無效的,所以我輸出它到瀏覽器。我注意到字符串的長度比實際應該長一點。當我在瀏覽器中複製並粘貼輸出並將其硬編碼到php中時,sting長度會變爲較小的值,而反序列化會起作用。
數據庫字符串...
ASCII - string(737) "a:10:{s:2:"id";i:2234950;s:13:"full_describe";s:11:"Brace start";s:6:"person";s:17:"Dr Aalok Y Shukla";s:8:"datetime";s:25:"2014-01-06T09:00:00+00:00";s:8:"duration";i:30;s:11:"on_waitlist";b:0;s:10:"company_id";s:5:"35927";s:8:"attended";b:1;s:6:"_links";a:2:{s:4:"self";a:1:{s:4:"href";s:60:"http://uk.bookingbug.com/api/v1/admin/35927/bookings/2234950";}s:6:"client";a:1:{s:4:"href";s:57:"http://uk.bookingbug.com/api/v1/admin/35927/client/809828";}}s:11:"appointment";a:1:{s:11:"description";s:11:"Brace start";}}"
複製並粘貼字符串到PHP ...
ASCII - string(517) "a:10:{s:2:"id";i:2234950;s:13:"full_describe";s:11:"Brace start";s:6:"person";s:17:"Dr Aalok Y Shukla";s:8:"datetime";s:25:"2014-01-06T09:00:00+00:00";s:8:"duration";i:30;s:11:"on_waitlist";b:0;s:10:"company_id";s:5:"35927";s:8:"attended";b:1;s:6:"_links";a:2:{s:4:"self";a:1:{s:4:"href";s:60:"http://uk.bookingbug.com/api/v1/admin/35927/bookings/2234950";}s:6:"client";a:1:{s:4:"href";s:57:"http://uk.bookingbug.com/api/v1/admin/35927/client/809828";}}s:11:"appointment";a:1:{s:11:"description";s:11:"Brace start";}}"
正如你所看到的字符串是相同的,但字符串從數據庫中調用顯示偏移錯誤。
我是否需要對從數據庫返回的字符串進行某種解碼或格式化?
感謝
他們是相同的,但有不同的長度。你檢查了這個字符串的編碼嗎(類似mb_detect_encoding)?我認爲你應該將第一個字符串轉換成與第二個字符串相同的編碼。 – klipach
也有你檢查是否有任何尾隨空格? 'trim()' – bansi
@klipach我已經使用mb_detect_encoding()檢查了編碼,它們都是ASCII。任何想法爲什麼這樣做? – arbme