preg_replace не работает со специальными символами

Я пытаюсь исправить некоторые ошибочно сериализованные данные с помощью функции из ответов stackoverflow. Я понял, что некоторые особые символы нарушают шаблон. Есть ли способ это исправить?

строка:

s:4:"text";s:317:"<div style="text-align:center">
<img src="http://dev-xxxxxxx.yyyyyyy.net/mirza/xxxxxxxx/yyyyyyyy/wp-content/uploads/sites/13/2014/09/footer-logo1.png" alt="yyyyyyyy template" />
</div>
<div style="text-align:center;margin-top:30px"><span style="font-size:11px;color:#fff">COPYRIGHT ALL RIGHTS RESERVED � 2014</span></div>

";s:6:"filter";b:0;}s:12:"_multiwidget";

функция:

    $row_sub["option_value"] = preg_replace_callback ( '!s:(\d+):"(.*?)";!', function($match) {

echo " - ".$match[1]." -
";
echo " - ".strlen($match[2])." - <br />
";
echo " - ".$match[2]." - <br />
";

return ($match[1] == strlen($match[2])) ? $match[0] : 's:' . strlen($match[2]) . ':"' . $match[2] . '";';
},$row_sub["option_value"]);

выход :

                     - 4 -
- 4 - <br />
- text - <br />
- 6 -
- 6 - <br />
- filter - <br />
- 12 -
- 12 - <br />
- _multiwidget - <br />

Ожидаемый результат:

                 - 4 -
- 4 - <br />
- text - <br />
- 317 -
- 325 - <br />
-  <div style="text-align:center">
<img src="http://dev-xxxxxxx.yyyyyyy.net/mirza/xxxxxxxx/yyyyyyyy/wp-content/uploads/sites/13/2014/09/footer-logo1.png" alt="yyyyyyyy template" />
</div>
<div style="text-align:center;margin-top:30px"><span style="font-size:11px;color:#fff">COPYRIGHT ALL RIGHTS RESERVED � 2014</span></div> - <br />
- 6 -
- 6 - <br />
- filter - <br />
- 12 -
- 12 - <br />
- _multiwidget - <br />

Как видите, часть с HTML-тегами отсутствует. Возможно из-за знака авторского права.

Как я могу решить эту проблему?

0

Решение

это не была особая проблема с символами.

Использование правильных разделителей решило проблему:

preg_replace_callback ( '!s:(\d+):"(.*?)";!smi',
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]