0
我正在構建一個多語言網站Laravel4。
在數據庫中我有名爲「內容」的列,其中包含多種語言的序列化值。例如:
函數反序列化偏移量錯誤
a:3:{s:2:"gb";s:15:"This is English";s:2:"es";s:5:"Hola!";s:2:"si";s:19:"Slovenija je zakon!";}
序列化數組包含:
- 語言的縮寫,從會議所作
- 內容是來自於輸入字段現在
當我添加新語言到數據庫,它會創建新的序列化字符串。大! 但是,當我想反序列化該字符串和添加值,我得到以下錯誤:
unserialize() [<a href='function.unserialize'>function.unserialize</a>]: Error at offset 0 of 30 bytes
任何想法是怎麼回事?我理解錯誤的含義,但它沒有任何意義,因爲我確信數據庫中的值是序列化的字符串。
public function setContentAttribute($value)
{
$lang = (Session::has('my.locale') ? Session::get('my.locale') : Config::get('app.locale'));
/* Create new serialized string */
if(empty($this->content)) {
$data[$lang] = $value['content'];
$this->attributes['content'] = serialize($data);
/* Update values */
} else {
$data = $this->content;
$data = unserialize($data)
$data[$lang] = $value['content'];
$this->attributes['content'] = serialize($data);
}
}
P.S:我正在使用增變器向數據庫添加值。
我希望它很清楚。如果有什麼不清楚的地方,請發表評論,我會解決它。
謝謝!
unserialising時的錯誤提示字符串已被修改(即損壞)。看看這個:http://stackoverflow.com/questions/10152904 –
我使用訪問器和mutators。是否有可能,當我從數據庫中檢索值時,一個增變器正在搞亂我的'$ this-> content'? – intelis
不一定是一個增變,但我懷疑是什麼。在序列化數據之後抓取輸出並將其與您從數據庫傳遞給'unserialise()'的字符串進行比較。 –