Замена функций в коде на мультибайтовые аналоги (mb_)
В php 7.2 ini-настройка mbstring.func_overload объявлена устаревшей. К тому же битрикс решил её выключить в последних обновлениях.
Если у вас сайт в UTF-8 кодировке, то необходимо заменить все функции (strpos, strlen и т.п.) на их mb_ аналоги (mb_strpos, mb_strlen). Руками это долго, поэтому написал скриптик, который рекурсивно ищет и меняет функции. Писал "на коленке", использовать с крайней осторожностью.
<?php $arFn = array( // Весь список тут https://www.php.net/manual/ru/ref.mbstring.php "strlen", "strpos", "strrpos", "substr", "strtolower", "strtoupper", "stripos", "strripos", "strstr", "stristr", "strrchr", "substr_count", ); $pattern = "/([^\w])(".implode('|', $arFn).")([^\w])/"; $dir = new RecursiveDirectoryIterator('.'); $it = new RecursiveIteratorIterator($dir); $res = new RegexIterator($it, '/^.+\.php$/i', RecursiveRegexIterator::GET_MATCH); foreach ($res as $arFiles) { foreach ($arFiles as $file) { if (mb_strpos($file, './bitrix/') === 0) { // Исключаем ядро битрикс continue; } $content = file_get_contents($file); $res = preg_match_all($pattern, $content, $matches); if ($res) { if ($resContent = preg_replace($pattern, "$1mb_$2$3", $content)) { echo $file.'<br />'; file_put_contents($file, $resContent); } } } } ?>
Скрипт рекурсивно (от директории запуска) ищет php файлы, читает их, ищет в них функции для замены и если находит, то меняет на mb_ аналоги и сохраняет полученный код обратно в файл. Запускать можно в корне сайта.
Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.