Строки не идентичны.При просмотре источника вашей страницы у выходящей из базы данных появляется разрыв строки:
a:8:{i:0;s:0:"";i:1;s:11:"New Listing";i:2;s:11:"Just Listed";i:3;s:9:"New Price";i:4;s:17:"Exclusive Listing";i:5;s:12:"Just Reduced";i:6;s:31:"Great
Price!;Showroom Condition";i:7;s:42:"Featured In;Dream Homes of Canada Magazine";
Как вы можете видеть после Великого.Но он должен хорошо обрабатывать символы новой строки.Когда я скопировал сериализованную строку базы данных и попытался ее десериализовать, я получил:
Примечание PHP: unserialize (): ошибка по смещению 176 из 234 байтов в коде оболочки php в строке 1
Что означает, что происходит что-то странное, не знаю, что.Я собираюсь продолжать копать, но просто размещать то, что я узнал.Однако, если вы хотите истинный тест, добавьте новую строку после Великого.
ОБНОВЛЕНИЕ
<?php
$var = 'a:8:{i:0;s:0:"";i:1;s:11:"New Listing";i:2;s:11:"Just Listed";i:3;s:9:"New Price";i:4;s:17:"Exclusive Listing";i:5;s:12:"Just Reduced";i:6;s:31:"Great' . "\n" .
'Price!;Showroom Condition";i:7;s:42:"Featured In;Dream Homes of Canada Magazine";}';
$settings['remarksdisplay'] = 'a:8:{i:0;s:0:"";i:1;s:11:"New Listing";i:2;s:11:"Just Listed";i:3;s:9:"New Price";i:4;s:17:"Exclusive Listing";i:5;s:12:"Just Reduced";i:6;s:31:"Great
Price!;Showroom Condition";i:7;s:42:"Featured In;Dream Homes of Canada Magazine";}';
echo 'Echoing $var:' . PHP_EOL;
echo $var;
echo "\n\n";
echo 'Echoing $settings[\'remarksdisplay\'] retrieved from mysql database field:' . PHP_EOL;
echo $settings['remarksdisplay'];
echo "\n\n";
echo 'When you run print_r(unserialize($var)):' . PHP_EOL;
print_r(unserialize($var));
echo "\n";
echo 'When you run print_r(unserialize($settings[\'remarksdisplay\'])):' . PHP_EOL;
print_r(unserialize($settings['remarksdisplay']));
echo "\n\n";
echo 'When you run IF statement to see if $settings[\'remarksdisplay\']==$var:' . PHP_EOL;
if($settings['remarksdisplay']==$var) {echo "EQUAL";} else {echo 'not equal';}
echo PHP_EOL;
?>
Извините, я изменил перевод строки на символы NewLine, потому что я проверял егов CLI.Приведенный выше код имеет дополнительный пробел после удаления Great , и он работает просто отлично.
Итак, в основном происходило то, что лишнее пространство сбрасывало счетчик, как вы можете видеть, s: XX число указывает, какова длина строки, что дополнительное пространство сделало его 32 вместо 31 для «Великого».Ценовое предложение, так как сериализация должна быть точной, это выдает ошибку Уведомления, которую большинство людей не показывают и почему не было никаких ошибок.