溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP出現(xiàn)Notice: unserialize() [function.unserialize]: Error at offset問題的解決方案

發(fā)布時間:2020-06-14 19:13:56 來源:網(wǎng)絡(luò) 閱讀:2432 作者:happyyin 欄目:web開發(fā)

今天的用PHP的時候無意的出現(xiàn)了用unserialize()函數(shù)轉(zhuǎn)換老是返回false,我確認我的字符串是沒錯的,測試了很多次還是一樣,沒辦法,啟用了error_reporting(E_ALL)啟用錯誤信息,沒想到發(fā)現(xiàn)了Notice: unserialize() [function.unserialize]: Error at offset的信息, 因為我字符我是從數(shù)組轉(zhuǎn)換過來的,所以應(yīng)該是沒有錯的, Google了一下,原來是編碼問題,在PHP手冊的評論中有人討論了此問題.

原來我serialize后的數(shù)組字符串是從數(shù)據(jù)庫里取出來的,而原來插入數(shù)據(jù)庫時,因為美工修改前臺視圖代碼時導(dǎo)致視圖編碼未保存成UTF8編碼而是ANSCII編輯,而我復(fù)制出來后用unserialize()的PHP文件是UTF-8編碼,編碼不同,所以就出現(xiàn)錯誤了...

例子:
“ 首頁以ANSCII方式操作

<?php

$arr = array('en' => 'hello', 'cn' => '您好');
$str = serialize($arr);
echo $str;

?>

輸出結(jié)果: a:2:{s:2:"en";s:5:"hello";s:2:"cn";s:4:"您好";}

然后以UTF-8的編碼方式來測試

則以上代碼的輸出結(jié)果為: a:2:{s:2:"en";s:5:"hello";s:2:"cn";s:6:"您好";}
看到有什么不同了吧,在出現(xiàn)中文字符時字符長度就不一樣了,也就是strlen('您好')在第一種編碼中是4,而在第二種編碼中是6,其中原因可以查看相關(guān)手冊. 而unsrialize()要根據(jù)類似 s:6:"您好" 中的6來判斷字符長度并進行反序列,但原來的是4,字符長度不符,也就是出現(xiàn)了offset錯誤

解決辦法:
“ 將要反序列的字符串進行一次轉(zhuǎn)換,代碼

$data=preg_replace('!s:(\d+):"(.*?)";!se',"'s:'.strlen('$2').':\"$2\";'",$data);
$data=unserialize($data);
如果您的解碼數(shù)組內(nèi)容里有類似(<img src=\"/new/uploadfile/editor/p_w_picpath/20131221/20131221201521_54813.jpg\" alt=\"\" />的雙引號轉(zhuǎn)移字符)的子元素,還需要對特定子元素去除重復(fù)的轉(zhuǎn)移雙引號(文本編輯器上傳圖片功能默認對URL內(nèi)容進行了斜杠轉(zhuǎn)義,解碼后需要對其去除重復(fù)雙引號轉(zhuǎn)移)

a:7{s:8:"nickname";s:10:"4211931411";s:3:"uid";s:6:"481010";s:10:"other_type";s:1:"1";s:8:"other_id";i:2023;s:11:"other_title";s:143:"發(fā)布了博文: <a href='/blog/a-log/uid-481010/id-2023' target='_blank'>中國有個你大爺 巧妙 答記者問 </a>";s:3:"des";s:232:"<p>
<img src=\"/new/uploadfile/editor/p_w_picpath/20131221/20131221201521_54813.jpg\" alt=\"\" /></p><p><p>1、記者:大爺,巿長被綁架了,綁匪要贖金一千萬,如果不給,他們就用汽油燒死他。現(xiàn)正在";s:11:"content_url";s:53:"/blog/a-log/uid-481010/id-2023";}

$data['des']=stripslashes($data['des']);


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI