Замена функций в коде на мультибайтовые аналоги (mb_)

2k
Алексей,
Замена функций в коде на мультибайтовые аналоги (mb_)
Замена функций в коде на мультибайтовые аналоги (mb_)

В php 7.2 ini-настройка mbstring.func_overload объявлена устаревшей. К тому же битрикс решил её выключить в последних обновлениях.

В 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_ аналоги и сохраняет полученный код обратно в файл. Запускать можно в корне сайта.

Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.

Опубликовано 4 декабря 2020 | Обновлено 5 марта 2021
разработчику, костыли, готовый код, php7, utf8
Поделиться
Похожие статьи
Рекурсивный поиск подстроки в php файлах через консоль
В битриксе много файлов, очень много файлов, иногда можно потратить десятки минут на поиск нужного к...
Читать дальше » 0
Алексей,
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
В php 7.2 ini-настройка mbstring.func_overload объявлена устаревшей. К тому же битрикс решил её выключить в последних обновлениях.