2014-01-28 165 views
9

我們在使用PHP序列化/反序列化時遇到了一個奇怪的問題。我們已經序列化並存儲在一個特定的字符串中(UTF-8整理)。反序列化時,它會返回錯誤。PHP序列化/反序列化錯誤

如: 字符串:

「Anoop的表現非常出色,從雜誌切割出的圖片, 開始以字母P.」 在DB

序列化數據:

s:96:「Anoop做了一個很棒的工作,從雜誌 中剪切出以字母P開頭的圖片。」;

雖然反序列化我們得到了這個錯誤Notice - unserialize(): Error at offset 2 of 101 bytes。我們注意到字符串長度是不同的。這個問題的原因是什麼?

任何幫助將非常感激。謝謝!

+1

的http://計算器。COM /問題/ 10152904 /反序列化功能 - 反序列化錯誤 - 在偏移 看一次,希望你找到解決方案... –

+2

我停下最近連載的數據,並開始只是存儲JSON對象,而不是因爲與還原序列化的問題進行了駕駛我堅果。 – Dave

回答

1

你看到第二個字符串中有分號嗎? UTF-8一直不使用一個字節,它是1到4個字節。

從數據庫解碼字符串時,請確保輸入在輸入到數據庫時使用正確的字符集編碼。

我正在使用表單在DB中創建了一個有效的JSON內容字段的記錄,但它包含了卷積撇號。如果與窗體頁沒有

在頭上,然後將數據時使用了錯誤的編碼發送到數據庫。然後,當json_decode試圖將字符串轉換爲對象時,它每次都失敗。

1

PHP序列化/反序列化沒有問題,

是做到像

$string = "Anoop did a great job cutting out pictures from the magazine that started with the letter P. "; 
echo $string = serialize($string); 
echo '<br>'; 
echo unserialize($string); 

那麼,沒有錯誤。

如果您直接輸入unserialize這個字符串,則會顯示您之前顯示的相同錯誤。

$string = "Anoop did a great job cutting out pictures from the magazine that started with the letter P. "; 
//echo $string = serialize($string); 
echo '<br>'; 
echo unserialize($string); 

它適用於我你會嘗試這個。

3

你有可能沒有在你的連接中使用utf-8,或者你的PHP上下文不是utf-8?

嘗試使用SQL:

SET CLIENT_ENCODING = utf8 

之前打個電話讓您的數據。

的try /驗證:

ini_set ('default_charset' , 'UTF-8'); 
setlocale (LC_ALL, 'de_DE.UTF-8'); # or what your favorit