Просто используйте анонимную функцию, чтобы вернуть то, что у вас было, используя параметр $m
в качестве совпадений, поэтому $m[1]
вместо \1
:
$replacement = preg_replace_callback('/([\x80-\xFF])/',
function($m) {
return "=" . strtoupper(dechex(ord($m[1])));
}, $value);
Если вы просто используете '/[\x80-\xFF]/'
без группы захвата, тогда вы используете $m[0]
.