Если я не ошибаюсь, вы хотите использовать preg_replace_callback вместо использования /e
модификатора .
Если вы хотите передать дополнительные параметры в функцию обратного вызова, вы можете использовать use
идентификатор или заключить обратный вызов в другую функцию .
Второй пример может выглядеть так:
$str = preg_replace_callback(
'/\&\#([0-9]+)\;/m', function ($matches) use ($lo) {
// function body with return statement
}, $str
);
Примечания
Ваше регулярное выражение \&\#([0-9]+)\;
будет соответствовать строке типа 𸽵
. Я думаю, вам не нужно сбрасывать &
и #
.
В вашем коде вы используете return strtoupper($matches[1], $lo);
, но strtoupper принимает один параметр вместо 2 параметров.
Если это то, что вы хотите сопоставить, то при запуске вашего кода вы можете увидеть, что $matches[1]
содержит "233333"
, поэтому это будет называться return strtoupper("233333");