Приветствую! Существует такая проблема. Делаю cUrl запрос и в ответ получаю серилизованную строку с данными. Пытаюсь сделать unserialize($str) и получаю false. Хорошо. Пишем тест: PHP: <?php //Пробелы поставлены методом "тыка" для "читабельности" поста. $str = 'a:33:{s:7:"user_id";i:199630;s:5:"login";s:10:"дщпшт";s:5:"alias";s:3:"bda";s:10:"isbusiness";i:0;s:7:"pn_r_id";i:230324 ;s:11:"r_last_name";s:8:"ффф";s:6:"r_name";s:5:"ффф";s:13:"r_middle_name";s:9:"ффф";s:7:"pn_e_id";i:2525 73;s:11:"e_last_name";s:9:"qwerqwsda";s:6:"e_name";s:8:"sadfasdf";s:13:"e_middle_name";N;s:5:"em_id";i:186475;s:5:"e mail";s:19:"qwe@domain.ru";s:9:"em_upd_id";N;s:9:"email_upd";N;s:10:"ph_prim_id";i:97372;s:10:"phone_prim";s:10: "9878250690";s:9:"ph_sec_id";i:147605;s:9:"phone_sec";s:9:"123456";s:10:"ph_cell_id";N;s:10:"phone_cell";N;s:9:"ph_fa x_id";N;s:9:"phone_fax";N;s:8:"skype_id";i:147606;s:11:"phone_skype";s:8:"boldinov";s:7:"addr_id";i:159659;s:8:"zip_code" ;s:6:"150000";s:7:"country";s:2:"RU";s:8:"province";s:0:"";s:4:"city";s:6:"Москва";s:7:"address";s:15:"Россия, Саратов";s:8:"computed";i:1;}'; var_dump(unserialize($str)); //false???? 0_o ?> Выжимка из класса сервиса PHP: <?php class A { protected function _curlRequest($url, array $options = array()) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); if(!empty($options)) { curl_setopt_array($ch, $options); } $result = curl_exec($ch); $info = curl_getinfo($ch); if ( in_array($info['http_code'], $this->_validCodes) ) { $data = iconv('windows-1251', 'UTF-8', $result); return $data; } return false; } function getProfile($userId) { $url = 'http://[адрес]'.intval($userId); $result = $this->_curlRequest($url); return $result; } } ?> Client.php listing: PHP: <?php $client = new Zend_Soap_Client('[адрес]/server.php?wsdl', array('compression' => SOAP_COMPRESSION_ACCEPT)); $str = $client->getProfile(199630); $arr = unserialize($str); var_dump($arr); //false???? 0_o ?> Вопрос. Почему "false???? 0_o"?
Видно, что вы пытаетесь восстановить объект из строки в кодировке UTF-8, хотя сами используете windows-1251. Один из вариантов решения - пересчитать длины строк в новой кодировке. Код (Text): function mb_unserialize($string) { $string = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $string); return unserialize($string); } [/code]